当前位置: 首页 > 网络应用技术

如何计算对象的大小?

时间:2023-03-06 16:40:20 网络应用技术

  本文的主要问题如下:

  问题:新对象()有多少个字节?

  在热点虚拟机中,内存中对象的布局可以分为三个区域:标题(标头),实例数据和填充。

  有点直观:

  热点虚拟机的对象头包括:

  它用于存储对象本身的数据,例如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