如何在JVM中实现压缩ooP?

时间:2015-09-01 17:30:25

标签: java jvm

快速谷歌搜索结果令人惊讶。

我的问题如下:

对于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字节对齐的。

1 个答案:

答案 0 :(得分:2)

http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#compressedOop

这是否回答了你的问题,它们是偏移量,它们用于索引8字节块而不是一个字节块,因为对象是8字节对齐的。