本文的主要问题如下:
问题:新对象()有多少个字节?
在热点虚拟机中,内存中对象的布局可以分为三个区域:标题(标头),实例数据和填充。
有点直观:
热点虚拟机的对象头包括:
它用于存储对象本身的数据,例如hashcode,GC老化,锁定状态标志,线程锁定锁,有偏见的线程ID,偏置时间戳等。64 -PIT虚拟机是32位和64位,它们是正式的称为“ mark Word”。换句话说,32-位虚拟机4字节,64位 - 位虚拟机8字节。
Mark Word中的特定商店是什么?我们可以查看下表(以64位的操作系统为例,不要在此处扩展):
对象头的另一部分是Klass类型指针,即,对象指向其元数据的指针,虚拟机确定该对象的哪个类是由该指针。32-bit 4 bytes,64 -bit打开指针压缩或最大内存<32g 4字节,否则8个字节。JDK1.8默认打开指针压缩后4个字节。当指针压缩在JVM参数(-xx:-usecomprosedoops)中关闭时,长度为8个字节。
如果对象是数组,则必须在对象头中有一个数据以记录数组长度。长度为4个字节。
JDK8下的64位操作系统中有多少个新对象()字节?
答案:16字节
8个字节是标记字
4个字节是指针(JDK 8默认为打开指针压缩)4个字节是对齐填充
原始:https://juejin.cn/post/7101658548232257549