gpt4 book ai didi

Java 将最大堆大小 (Xmx) 设置为物理内存的一部分

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:15 34 4
gpt4 key购买 nike

JDK 8 ,默认最大堆大小为

1/4th of the physical memory or 1GB

并且可以使用 -Xmx 开关覆盖它:

You can override this default using the -Xmx command-line option.

Xmx 开关适用于字节,而不是分数。是否有一种直接方法将最大堆设置为计算机物理内存的 X%?

编辑:

你问为什么?嗯,首先是好奇心。我觉得很奇怪,默认的 Xmx 是根据物理内存的一小部分定义的,但是一旦我触摸它,它就会突然变成一个绝对值。其次,如果我将相同(或类似)的应用程序部署到两台不同的服务器,并且其中一台具有更多的物理内存,我希望能够选择自动让 JVM 利用额外的内存。它并不总是有意义,但有时确实有意义。

显而易见的解决方案是使用 shell 脚本来检查可用空间量并计算 Xmx,但这似乎是一个笨拙的解决方案。我想用纯 Java 应该可以实现。

最佳答案

Java 8u191 (October 16, 2018) 以来,存在三个专用 JVM 选项来控制堆大小(作为可用内存的一部分)。它们被记录在 here 中。

请注意,与它的名称所暗示的相反,MinRAMPercentage 设置最大堆大小

-XX:InitialRAMPercentage=percent

Sets the initial amount of memory that the JVM will use for the Java heap before applying ergonomics heuristics as a percentage of the maximum amount determined as described in the -XX:MaxRAM option. The default value is 1.5625 percent.

-XX:MaxRAMPercentage=percent

Sets the maximum amount of memory that the JVM may use for the Java heap before applying ergonomics heuristics as a percentage of the maximum amount determined as described in the -XX:MaxRAM option. The default value is 25 percent.

-XX:MinRAMPercentage=percent

Sets the maximum amount of memory that the JVM may use for the Java heap before applying ergonomics heuristics as a percentage of the maximum amount determined as described in the -XX:MaxRAM option for small heaps. A small heap is a heap of approximately 125 MB. The default value is 50 percent.

以下是使用 jdk 11u10 在 x64 上使用 docker 运行的一些示例:

docker run --memory <limit> openjdk:11 java -XX:MaxRAMPercentage=25 -XX:MinRAMPercentage=50 -XX:InitialRAMPercentage=5 -XX:+PrintFlagsFinal 2>&1 | grep HeapSize

| Memory Limit | Initial Heap Size | Max Heap Size    |
|--------------|-------------------|------------------|
| 100Mi | 10485760 (~10%) | 52428800 (~50%) |
| 256Mi | 27262976 (~10%) | 132120576 (~50%) |
| 512Mi | 54525952 (~10%) | 134217728 (~25%) |
| 1Gi | 109051904 (~10%) | 268435456 (~25%) |

关于Java 将最大堆大小 (Xmx) 设置为物理内存的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47377336/

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