如果我错了,请纠正我,但据我了解,从 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 中默认使用压缩 Oop。
JVM 使用 32 位引用,它是实际数据的索引。即所使用的数字可能会经过重大转换才能成为实际的指针。您可以使用 Unsafe.getInt() 查看该索引。
压缩 Oops Java 8 的默认限制是 64 GB,您可以通过更改对象对齐方式将其增加到 128 GB,但这样做很少值得,因为您会因填充而丢失太多内存。
这是否仍然适用于 64 位 Oracle HotSpot JVM?如果是,我该如何关闭此行为并禁用 32 位内存优化?
它适用于 Oracle JVM 和 OpenJDK,您可以使用将其关闭-XX:-UseCompressedOops,但我无法想象您为什么要这样做。
| 归档时间: |
|
| 查看次数: |
1164 次 |
| 最近记录: |