在具有60 GB(或更多)内存的计算机上运行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应该有界吗?

最佳答案

问题是与CompressedOops相关的错误/功能(CompressedOops将堆大小限制为32GB,而-Xmx禁用CompressedOops,而MaxRAMPercentage则没有)。

要解决/解决方法,您可以:


添加-XX:-UseCompressedOops以禁用CompressedOops
使用OpenJDK13(已修复错误)


错误报告为here。 HT @Arnaud将我定向到那里。

07-24 13:49