gpt4 book ai didi

java - Java 7 和 8 中的 32 位堆优化

转载 作者:搜寻专家 更新时间:2023-11-01 02:43:34 31 4
gpt4 key购买 nike

如果我错了请纠正我,但据我了解,从 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 中默认使用压缩 Oops。

JVM 使用 32 位引用,这是对实际数据的索引。即使用的数字可能会经过重要的翻译成为实际的指针。您可以使用 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 将其关闭,但我无法想象您为什么要这样做。

关于java - Java 7 和 8 中的 32 位堆优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27961484/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com