繁体   English   中英

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位内存优化?

谢谢!

除了这里提供的答案之外, UseCompressedOops JVM标志做了什么以及何时应该使用它?

64位版本的JVM不能再以“32位”模式运行

64位JVM只能以64位模式运行。

我听说,如果JVM进程配置的最大堆小于32Gb,JVM会通过保留32位指针自动优化内存使用情况,

当堆小于32 GB(GB =千兆字节,Gb =千兆位)时,JVM在Java 6,7和8中默认使用压缩的Oops。

JVM使用32位引用,它是实际数据的索引。 即使用的数字可能会经历重要的翻译,成为实际的指针。 您可以使用Unsafe.getInt()查看此索引。

Compressed Oops Java 8的默认限制为64 GB,您可以通过更改对象对齐将其增加到128 GB,但由于丢失了太多内存以填充,因此很少这样做。

这仍然适用于64位Oracle HotSpot JVM吗? 如果是,我该如何关闭此行为并禁用32位内存优化?

它适用于Oracle JVM和OpenJDK,您可以使用-XX:-UseCompressedOops关闭它-XX:-UseCompressedOops但我无法想象您为什么-XX:-UseCompressedOops

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM