使用java-9构建9-ea+149和jol0.6。运行这个简单的代码:ArrayListlist=newArrayList();list.add(12);System.out.println(ClassLayout.parseInstance(list).toPrintable());输出:OFFSETSIZETYPEDESCRIPTIONVALUE04(objectheader)01000000(00000001000000000000000000000000)(1)44(objectheader)00000000(00000000000000000000000000000000)
简介:我使用了JOL(JavaObjectLayout)tool为研究目的分析Java对象的内部和外部碎片。在这样做的过程中,我偶然发现了以下内容:x@pc:~/Util$java-jarjol-cli-0.9-full.jarinternalssun.reflect.DelegatingClassLoader#WARNING:UnabletoattachServiceabilityAgent.Youcantryagainwithescalatedprivileges.Twooptions:a)use-Djol.tryWithSudo=truetotrywithsudo;b)echo0
以下是我提出问题的两个示例(假设您在此处有JOL):Layouterlayout32Bits=newHotSpotLayouter(newX86_32_DataModel());Layouterlayout64BitsComp=newHotSpotLayouter(newX86_64_COOPS_DataModel());还有一个使用这个的例子:int[]ints=newint[10];System.out.println(ClassLayout.parseInstance(ints,layout32Bits).toPrintable());System.out.println(Cla
我对HotSpot中堆上的对象布局相当熟悉,但对于Android则不是那么熟悉。例如,在32位HotSpotJVM中,堆上的一个对象被实现为一个8字节的头部,然后是对象的字段(一个字节用于boolean,四个字节用于引用,以及其他所有内容),按特定顺序排列(对父类(superclass)中的字段有一些特殊规则),并填充为8个字节的倍数。我进行了一些研究,但找不到任何Android特定信息。(我有兴趣优化一些极其广泛使用的数据结构,以最大限度地减少Android上的内存消耗。) 最佳答案 dalvik/vm/oo/Object.h是你
我对HotSpot中堆上的对象布局相当熟悉,但对于Android则不是那么熟悉。例如,在32位HotSpotJVM中,堆上的一个对象被实现为一个8字节的头部,然后是对象的字段(一个字节用于boolean,四个字节用于引用,以及其他所有内容),按特定顺序排列(对父类(superclass)中的字段有一些特殊规则),并填充为8个字节的倍数。我进行了一些研究,但找不到任何Android特定信息。(我有兴趣优化一些极其广泛使用的数据结构,以最大限度地减少Android上的内存消耗。) 最佳答案 dalvik/vm/oo/Object.h是你
你能给我一些关于对象头中究竟存储了什么的信息吗?我知道,它可能依赖于JVM,但至少对于HotSpot来说可能是这样?我正在寻找专门针对第一行的准确描述。我已经阅读了一些我无法用我找到的信息进行肯定验证的信息。也许你有一个OpenJDKwiki的链接说明了一切? 最佳答案 对于热点:对象头由一个标记词和一个类指针组成。标记字具有字长(4byte在32位架构上,8byte在64位架构上)和klass指针在32位架构上具有字长。在64位架构上,klass指针要么有字长,但也可以有4字节,如果堆地址可以编码在这些4字节中.这种优化称为“co
你能给我一些关于对象头中究竟存储了什么的信息吗?我知道,它可能依赖于JVM,但至少对于HotSpot来说可能是这样?我正在寻找专门针对第一行的准确描述。我已经阅读了一些我无法用我找到的信息进行肯定验证的信息。也许你有一个OpenJDKwiki的链接说明了一切? 最佳答案 对于热点:对象头由一个标记词和一个类指针组成。标记字具有字长(4byte在32位架构上,8byte在64位架构上)和klass指针在32位架构上具有字长。在64位架构上,klass指针要么有字长,但也可以有4字节,如果堆地址可以编码在这些4字节中.这种优化称为“co