博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【五】对象的创建
阅读量:5822 次
发布时间:2019-06-18

本文共 649 字,大约阅读时间需要 2 分钟。

 

 

二、Java  对象的结构

 

1.Header(对象头)

  • 自身运行时数据 (Mark Word)
    •   哈希值 Object 的hashCode() 是native修饰的   |   GC分代年龄  | 锁状态标志  |  线程持有的锁  |  偏向线程ID  |  偏向时间戳
  • 类型指针
  •  

2、InstanceData

 无论是从父类继承来的还是子类定义的,都在这里。这部分的存储顺序会受到存储策略,和字段在Java源码中定义的顺序的影响。HotSpot虚拟机默认的分配策略,是相同的宽度的字段被分配到一起。

  eg: long  double 可能被分配到一块,short 和char 被分配到一块儿。

在满足这个前提之下,父类中定义的变量可能会出现在子类变量之前。

 

3、Padding(填充,无实际意义)

HotSpot要求对象的大小必须是8个字节的整数倍,而对象头部分正好是8个字节的整数倍,因此对象实例数据部分如果没有对齐时就需要通过padding补位

 

三、对象的访问定位

使用句柄

使用指针

 

栈内存中的引用指向对内存的区域,这么说不够严谨。

在Java虚拟机的规范中,这个栈中的引用类型,仅仅是规定了一个指向对象的引用。并没有定义这个引用对象应该通过何种方式去定位访问堆中的具体位置。

确实是引用了一块堆内存中的区域,但是这个区域是否就一定是这个对象呢?不一定!既可以是对象本身,也可以是其它的一块儿内存区域

 

转载于:https://www.cnblogs.com/guchunchao/p/10500219.html

你可能感兴趣的文章
spring-framework-中文文档二:Bean概述
查看>>
,计算 ,
查看>>
接口_GET请求_基于python
查看>>
常用的css的技巧
查看>>
规范测试流程
查看>>
Practices on Umbraco DataType Development
查看>>
Variant OLE automation
查看>>
白帽子讲web安全第三章笔记
查看>>
什么是yarn?
查看>>
git使用笔记
查看>>
jquery绑定事件,解绑事件
查看>>
AngularJS实现的自定义过滤器简单示例
查看>>
Java基础-赋值运算符Assignment Operators与条件运算符Condition Operators
查看>>
VMware虚拟机安装
查看>>
从零开始编写自己的C#框架(23)——上传组件使用说明
查看>>
Spring boot 集成 Swagger
查看>>
小学期软件工程团队项目进度3
查看>>
原子性
查看>>
Android Service组件
查看>>
FTPUtil工具类
查看>>