Understanding the JVM(三)对象的内存布局
来源:互联网 发布:mac下制作黑苹果u盘 编辑:程序博客网 时间:2024/06/05 23:58
对象头
HotSpot虚拟机的对象头包括两部分信息:运行时数据和类型指针。
运行时数据
用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。官方称为“Mark word”
类型指针
即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。并不是所有的虚拟机实现都必须在对象数据上保留类型指针,换句话说,查找对象的元数据并不一定要经过对象本身,可参考对象的访问定位。
如果对象是一个Java数组,那在对象头中还必须有一块用于记录数组长度的数据,因为虚拟机可以通过普通Java对象的元数据信息确定Java对象的大小,但是从数组的元数据中无法确定数组的大小。
实例数据
实例数据部分是对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容。无论是从父类中继承下来的,还是在子类中定义的,都需要记录下来。HotSpot虚拟机默认的分配策略为longs/doubles、ints、shorts/chars、bytes/booleans、oop,从分配策略中可以看出,相同宽度的字段总是分配到一起。
对齐填充
对齐填充不是必然存在的,没有特别的含义,它仅起到占位符的作用。
由于 HotSpot VM 的自动内存管理系统要求对象起始地址必须是 8 字节的整数倍,也就是说对象的大小必须是 8 字节的整数倍。对象头部分是 8 字节的倍数,所以当对象实例数据部分没有对齐时,就需要通过对齐填充来补全。
阅读全文
0 0
- Understanding the JVM(三)对象的内存布局
- Understanding the JVM(二)虚拟机对象的创建
- Understanding the JVM(四)对象的访问定位
- Understanding the JVM(五)内存参数调优
- Understanding the JVM(六)判断哪些内存需要回收
- jvm中对象的内存布局(HotSpot为例)
- JVM(PART III)对象的内存布局
- JVM对象的内存布局和访问
- JVM对象的创建、内存布局、访问
- jvm之对象的内存布局
- JVM(六)对象的内存布局
- Understanding the JVM(九)虚拟机类加载的时机
- Understanding the JVM(十)虚拟机类加载的过程
- Understanding the JVM(十一)虚拟机的类加载器
- 细说JVM系列:JVM对象的创建、内存布局、访问
- JVM的内存布局
- jvm读书笔记-2.3内存对象的创建、布局和访问
- JVM——深入分析对象的内存布局
- 乐视超级汽车智驾副总裁倪凯:为何被誉为“中国无人驾驶第一人”
- 浅谈C++中的重载、覆盖、隐藏
- leetcode5:最长回文子串
- 通过HTTP请求响应过程了解HTTP协议
- 支持向量机SVM(一)
- Understanding the JVM(三)对象的内存布局
- python—super
- 从软银本田联手打造智能汽车说开,看看AI如何造福汽车行业
- 360智能家庭总裁邓邱伟:由点及面构筑家庭生态
- MySQL与Python的交互
- monkey测试
- 深度学习基础之Python语法
- BZOJ 1012: [JSOI2008]最大数maxnumber
- mysql数据库中关于记录存在,更新记录,记录不存在,插入记录的sql语句编写