【发布时间】:2011-08-02 21:04:58
【问题描述】:
根据我关于CLR could use compressed pointers 的问题,答案是它毫无意义。不过,一些 JVM 正在实现它,那么这种优化的具体好处是什么,因为获得 4 个字节似乎并不值得?
【问题讨论】:
标签: .net optimization pointers jvm 64-bit
根据我关于CLR could use compressed pointers 的问题,答案是它毫无意义。不过,一些 JVM 正在实现它,那么这种优化的具体好处是什么,因为获得 4 个字节似乎并不值得?
【问题讨论】:
标签: .net optimization pointers jvm 64-bit
压缩引用具有巨大的价值。首先,在 x86 上,64 位模式解锁了 8 个要使用的新寄存器,这是一个巨大的性能提升。其次,使用 4 字节而不是 8 字节的头/对象指针显着提高了缓存效率。相对于“完整”的 64 位 JVM(您的情况会有所不同),我们看到 IBM Java 的实际优势约为 5-10%。这使得迁移到“小型 64 位”堆变得容易且轻松,突破了 32 位 JVM 中约 2gb 的内存限制。 (真正的 32 位限制可能在 1700mb 到 ~3.7gb 之间,具体取决于操作系统)。
【讨论】:
您可以从每个对象引用中获得 4 个字节。如果object有更多的引用,这在java object中很常见,可以节省更多的内存。 小对象大小可能会导致 2 个结果,首先,减少 GC 暂停时间。 2、缓存命中率提高。所以java应用程序可以获得性能提升。对于基准测试,启用 CompressedOops 可以提高 5%~10% 的性能。
【讨论】:
如果您的主要目标是完全避免垃圾回收,或者至少减少 GC 运行频率,那么这是值得的,因为它可以显着减少内存占用。
【讨论】: