快速谷歌搜索结果令人惊讶。
我的问题如下:
对于32位架构 - 2 ^ 32字节将是内存空间= 4GB 因此,对于4 GB的Java堆,我们需要一个大小为32位= 4字节的指针。
但是,通过压缩oop的概念,JVM仍然可以使用4字节指针,最大堆大小为32 GB。
考虑一下,32 GB = 4 GB * 2 ^ 3。 这意味着我们实际上需要3个比特,但在存储/访问期间,JVM会以某种方式对这些比特进行编码/解码。
我发现这些网页无法访问:http://wikis.sun.com/display/HotSpotInternals/CompressedOops https://wikis.oracle.com/display/HotSpotInternals/CompressedOops
有人可以向我解释幕后发生的魔法吗?
To Mods:我找到了一个现有问题,但是指向https://wikis.oracle.com/display/HotSpotInternals/CompressedOops。这个维基不再存在,你可以请这个问题,以至于有人指出我的另一个深层链接。请。
编辑:
@Markus Mikkolainen回应是我发现的最简单,最简单的解释: 它们是偏移量,它们用于索引8字节块而不是一个字节块,因为对象是8字节对齐的。
答案 0 :(得分:2)
这是否回答了你的问题,它们是偏移量,它们用于索引8字节块而不是一个字节块,因为对象是8字节对齐的。