在具有60GB(或更多)内存的计算机上运行OpenJDK 11时,
MaxRAMPercentage
仅允许我分配大约30GB。
这可以正常工作:
>~# java -XX:MaxRAMPercentage=10 -XshowSettings:vm -version
VM settings:
Max. Heap Size (Estimated): 5.90G
Using VM: OpenJDK 64-Bit Server VM
openjdk version "11.0.4" 2019-07-16
OpenJDK Runtime Environment (build 11.0.4+11-post-Debian-1bpo91)
OpenJDK 64-Bit Server VM (build 11.0.4+11-post-Debian-1bpo91, mixed mode, sharing)
但是当该百分比产生的堆大小超过30G时,我得到:
>~# java -XX:MaxRAMPercentage=75 -XshowSettings:vm -version
VM settings:
Max. Heap Size (Estimated): 29.97G
Using VM: OpenJDK 64-Bit Server VM
openjdk version "11.0.4" 2019-07-16
OpenJDK Runtime Environment (build 11.0.4+11-post-Debian-1bpo91)
OpenJDK 64-Bit Server VM (build 11.0.4+11-post-Debian-1bpo91, mixed mode, sharing)
使用良好的旧-Xmx
可以正常工作(例如-Xmx50G
)。
我想念什么? MaxRAMPercentage
应该有界吗?
答案 0 :(得分:4)
问题是与CompressedOops相关的错误/功能(CompressedOops将堆大小限制为32GB,而-Xmx
禁用CompressedOops,而MaxRAMPercentage
则没有)。
要解决/解决方法,您可以:
-XX:-UseCompressedOops
以禁用CompressedOops 错误报告为here。 HT @Arnaud将我定向到那里。