Pop*_*los 4 java garbage-collection jvm
我们正在 Docker 容器中使用 OpenJDK 17.0.7 运行 Java 应用程序,并使用这些参数(这些参数仅与我的问题相关):
-XX:InitialRAMPercentage=75.0 -XX:MaxRAMPercentage=75.0 -XX:MaxMetaspaceSize=1G -XX:+UseG1GC
这是 JDK Mission Control 中的一张图片,显示了应用程序如何启动:
您可以看到提交的大小始终不一样。它最初为 3GiB,然后增长到约 6GiB。
然后我将 VM Arguments 更改为使用 Xms/Xmx 而不是 RAMPercentage:
-Xms6G -Xmx6G -XX:MaxMetaspaceSize=1G -XX:+UseG1GC
现在我看到了我期望看到的图片 - 从启动开始承诺的大小等于 6GiB:

这是 InitialRAMPercentage 的预期行为吗?它的工作方式不应该与 Xms 相同吗?我错过了什么吗?
一个常见的误解是初始堆大小是最小堆大小。它们实际上是不同的,可以单独配置:-XX:InitialHeapSizevs. -XX:MinHeapSize.
在 JDK 17 中,是将和-Xms设置为相同值的快捷方式。相反,仅影响,因此堆可能会缩小到初始大小以下。InitialHeapSizeMinHeapSize-XX:InitialRAMPercentageInitialHeapSize
如果您想防止堆在运行时调整大小,请使用 禁用堆收缩-XX:MaxHeapFreeRatio=100,或完全禁用自适应大小策略:-XX:-UseAdaptiveSizePolicy。
注意:-XX:MinRAMPercentage没有帮助。它的名称令人困惑:参数 configures MaxHeapSize,而不是MinHeapSize- 请参阅JDK-8278492
| 归档时间: |
|
| 查看次数: |
767 次 |
| 最近记录: |