gpt4 book ai didi

java - RAM <4GB 的 64 位虚拟机上 Java 中的对象 header 大小

转载 作者:IT王子 更新时间:2023-10-29 00:17:05 30 4
gpt4 key购买 nike

我想知道如果 JVM 的可用 RAM 为 4GB,是否有某种方法可以让 64 位 VM 使用 8 字节对象 header 而不是 12 字节对象 header 。

或者它在 Linux 上是这样的,如果不是在 Windows 上?有人可以用这段代码测试吗?

import java.lang.reflect.Field;
import sun.misc.Unsafe;
public class ObjectSizes {
String s1;
String s2;
public static void main(String[] args) throws Exception {
Unsafe unsafe;
try {
Field field = Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true);
unsafe = (Unsafe)field.get(null);
} catch (Exception ex) {
throw new RuntimeException("Can't get Unsafe instance.", ex);
}
Field s1Field = ObjectSizes.class.getDeclaredField("s1");
Field s2Field = ObjectSizes.class.getDeclaredField("s2");
long s1OffSet = unsafe.objectFieldOffset(s1Field);
long s2OffSet = unsafe.objectFieldOffset(s2Field);
System.out.println("We are running "+System.getProperty("java.version"));
System.out.println("Object header size is "+s1OffSet+" bytes.");
System.out.println("Object reference size is "+(s2OffSet-s1OffSet)+" bytes.");
}
}

最佳答案

看起来不可能在 64 位 JVM 上有一个 8 字节的对象头。 header 由“标记字”、指向对象类的指针、数组大小(如果是数组)以及到达下一个 8 字节边界的填充组成。

  ,------------------+------------------+------------------ +---------------.
| mark word | klass pointer | array size (opt) | padding |
`------------------+------------------+-------------------+---------------'

因此在 64 位系统上对象头可以占用少至 8 + 4 = 12 个字节,但不会更少。

关于java - RAM <4GB 的 64 位虚拟机上 Java 中的对象 header 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17335884/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com