-XX:-UseContainerSupport 和-XX:MaxRAMPercentage 会自动计算其他JVM 资源大小吗?
Is -XX:-UseContainerSupport with -XX:MaxRAMPercentage automatically calculates other JVM resources size?
From Java 8 update 191 or later, or Java 10, 11,12, 13 etc. 我们有默认激活的名为 XX:+UseContainerSupport
的选项,所以 JVM 可以容器内 RAM 和 CPU 的读取限制。
通过设置 -XX:MaxRAMPercentage=90.0
我可以告诉 JVM 我想将多少可用 RAM 分配给 HEAP, 但是 呢? 比如 GC、CodeCache、ClassLoading、Meta space、DirectBuffers 等等?
JVM 是否也调整其大小(分配堆后向左 space)以不超过可用 RAM?
或者我仍然需要在每种情况下自己计算,如下所示:
-XX:MetaspaceSize=64m -XX:ReservedCodeCacheSize=32m -XX:CompressedClassSpaceSize=16m -Xss256k
例如,如果创建一个具有 1G RAM 的容器并在其中使用 -XX:MaxRAMPercentage=90.0
的 JVM 创建 运行,那么 HEAP 将占用 900m,而其他 JVM 的东西将只有 100m,这样做100m 将在所有所需资源之间智能分配,例如设置 XX:MaxMetaspaceSize
(默认情况下无限制)?
链接问题的答案也参考了我的 presentation,我在其中解释了 JDK 中所谓的“容器支持”只影响
- 默认堆大小
- 可用 CPU 数量
因此,答案是否定的:JVM 不会调整其他内存区域的大小,也不会尝试以任何其他方式满足容器限制。您需要手动控制它们。
From Java 8 update 191 or later, or Java 10, 11,12, 13 etc. 我们有默认激活的名为 XX:+UseContainerSupport
的选项,所以 JVM 可以容器内 RAM 和 CPU 的读取限制。
通过设置 -XX:MaxRAMPercentage=90.0
我可以告诉 JVM 我想将多少可用 RAM 分配给 HEAP, 但是
JVM 是否也调整其大小(分配堆后向左 space)以不超过可用 RAM? 或者我仍然需要在每种情况下自己计算,如下所示:
-XX:MetaspaceSize=64m -XX:ReservedCodeCacheSize=32m -XX:CompressedClassSpaceSize=16m -Xss256k
例如,如果创建一个具有 1G RAM 的容器并在其中使用 -XX:MaxRAMPercentage=90.0
的 JVM 创建 运行,那么 HEAP 将占用 900m,而其他 JVM 的东西将只有 100m,这样做100m 将在所有所需资源之间智能分配,例如设置 XX:MaxMetaspaceSize
(默认情况下无限制)?
链接问题的答案也参考了我的 presentation,我在其中解释了 JDK 中所谓的“容器支持”只影响
- 默认堆大小
- 可用 CPU 数量
因此,答案是否定的:JVM 不会调整其他内存区域的大小,也不会尝试以任何其他方式满足容器限制。您需要手动控制它们。