![](/img/trans.png)
[英]java- use a file for java heap space bigger than 1Gb in a 32bit windows
[英]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.