压缩对象指针的目的是什么?

时间:2011-08-01 23:19:45

标签: .net optimization pointers jvm 64-bit

在我关于是否CLR could use compressed pointers的问题之后,答案是它毫无意义。仍然有一些JVM正在实现它,所以这种优化的具体好处是什么,因为获得4个字节似乎不值得呢?

3 个答案:

答案 0 :(得分:7)

压缩引用有很大的价值。首先,在x86上,64位模式解锁了8个新的寄存器,这是一个巨大的性能胜利。其次,使用4字节而不是8字节的头/对象指针可以显着提高缓存效率。我们看到IBM Java中的实际好处相对于“完整”64位JVM大约为5-10%(您的里程会有所不同)。这使得向“小64位”堆移动变得简单而轻松,超过32位JVM中的~2gb内存限制。 (实际的32位限制可能是从1700mb到3.7gb,具体取决于操作系统)。

答案 1 :(得分:2)

您可以从每个对象引用获得4个字节。如果对象有更多引用,这在java对象中很常见,可以节省更多内存。 小对象大小可能导致2个结果,首先,GC暂停时间减少。 2,缓存命中率增加。因此Java应用程序可以获得性能提升。对于基准测试,启用CompressedOops可以将性能提高5%~10%。

答案 2 :(得分:1)

如果您的主要目标是完全避免垃圾收集,或至少减少GC运行频率,那么它是值得的,因为它可以导致大量的内存占用量减少。