yun*_*fan 5 java garbage-collection g1gc
例如,我将-Xmx设置为40G。我预计我的java处理器不会使用超过40G。
我的程序在 cms-gc 上运行良好。
但是当我更改为具有相同内存的 G1 gc 时(甚至多了 15% 的内存)。
它总是被 oom 杀手杀死。
我发现了一些这样的文章:Why does my Java process Consumer more memory than Xmx?
其表达的是:
G1 is especially known for its
excessive appetite for additional memory, so be aware of this.
Run Code Online (Sandbox Code Playgroud)
所以我想知道,如何限制 g1 gc 使用的内存以及为什么 g1 使用这么多额外的内存
你提到的文章(为什么我的Java进程比Xmx消耗更多的内存?)清楚地概述了这一点。
Java 进程需要内存来完成以下几件事:
另一个问题是,某些 JVM 内存不计为permgen内存,无法控制。
因此,如果您想将 Java 应用程序限制为 40 GB,则必须考虑所有类型的内存。从较小的值开始,例如:
-Xmx30g -XX:MaxPermSize=1g -Xss1m
Run Code Online (Sandbox Code Playgroud)
然后观察进程的内存使用情况,Xmx
如果进程安全地远离目标 40GB,则增加内存使用量。