Java 7 和 8 中的 32 位堆优化
32bit heap optimization in Java 7 and 8
如果我错了请纠正我,但据我了解,从 Oracle HotSpot JVM 1.7 开始,64 位版本的 JVM 不能再运行“32 位”模式(-d32命令行参数).
我听说,如果 JVM 进程配置的最大堆小于 32Gb,JVM 会通过保留 32 位指针等自动优化内存使用。
那是对的吗?这是否仍然适用于 64 位 Oracle HotSpot JVM?
如果是,我如何关闭此行为并禁用 32 位内存优化?
谢谢!
除了这里提供的答案What does the UseCompressedOops JVM flag do and when should I use it?
the 64bit version of JVM cannot run in "32 bit" mode any more
64 位 JVM 仅在 64 位模式下 运行。
I have heard, that in case when the JVM process is configured with less than 32Gb max heap the JVM automatically optimizes the memory usage by keeping 32bit pointers,
当堆小于 32 GB(GB = 千兆字节,Gb = 千兆位)时,JVM 在 Java 6、7 和 8 中默认使用压缩 Oop。
JVM 使用 32 位引用,这是对实际数据的索引。也就是说,使用的数字可能会经历重要的 t运行 变化才能成为实际指针。您可以使用 Unsafe.getInt().
查看此索引
Compressed Oops Java 8 的默认限制是 64 GB,您可以通过更改对象对齐方式将其增加到 128 GB,但很少值得这样做,因为您会因填充而损失太多内存.
Does that still apply to 64bit Oracle HotSpot JVM? If yes, how can I switch this behavior off and disable the 32bit memory optimization?
它适用于 Oracle JVM 和 OpenJDK,您可以使用 -XX:-UseCompressedOops
将其关闭,但我无法想象您为什么要这样做。
如果我错了请纠正我,但据我了解,从 Oracle HotSpot JVM 1.7 开始,64 位版本的 JVM 不能再运行“32 位”模式(-d32命令行参数).
我听说,如果 JVM 进程配置的最大堆小于 32Gb,JVM 会通过保留 32 位指针等自动优化内存使用。 那是对的吗?这是否仍然适用于 64 位 Oracle HotSpot JVM? 如果是,我如何关闭此行为并禁用 32 位内存优化?
谢谢!
除了这里提供的答案What does the UseCompressedOops JVM flag do and when should I use it?
the 64bit version of JVM cannot run in "32 bit" mode any more
64 位 JVM 仅在 64 位模式下 运行。
I have heard, that in case when the JVM process is configured with less than 32Gb max heap the JVM automatically optimizes the memory usage by keeping 32bit pointers,
当堆小于 32 GB(GB = 千兆字节,Gb = 千兆位)时,JVM 在 Java 6、7 和 8 中默认使用压缩 Oop。
JVM 使用 32 位引用,这是对实际数据的索引。也就是说,使用的数字可能会经历重要的 t运行 变化才能成为实际指针。您可以使用 Unsafe.getInt().
查看此索引Compressed Oops Java 8 的默认限制是 64 GB,您可以通过更改对象对齐方式将其增加到 128 GB,但很少值得这样做,因为您会因填充而损失太多内存.
Does that still apply to 64bit Oracle HotSpot JVM? If yes, how can I switch this behavior off and disable the 32bit memory optimization?
它适用于 Oracle JVM 和 OpenJDK,您可以使用 -XX:-UseCompressedOops
将其关闭,但我无法想象您为什么要这样做。