【发布时间】:2021-10-05 22:49:18
【问题描述】:
编辑:
我正在更改我的问题以使其更加明确。
这是我的应用程序,在 java8 中使用默认 gc 运行: 是的,有很多 gc 时间,但是,我提交的内存适合我实际使用的内存(我知道这不是所需的行为)
您可以看到已提交的内存远大于已使用的内存。
您可能想知道第一次和第二次执行之间发生了什么变化:
第一个与 JVM_ARGS 一起使用:-Xms1024m -Xmx20048m -XX:MaxGCPauseMillis=100
第二个:-XX:+UseG1GC -Xms1024m -Xmx20048m -XX:MaxGCPauseMillis=100 -XX:+UseStringDeduplication
我已经阅读了很多关于 G1 GC 的内容,但是,我不明白为什么这个简单的改变会让我的记忆行为如此不同?
【问题讨论】:
-
“我的进程消耗不超过 1.5GB” => 你怎么知道?
-
激活 GC 日志(例如参见 baeldung.com/java-gc-logging-to-file),您可能会看到发生了什么。很可能内存已投入使用,并且您将进行更频繁/更昂贵的垃圾回收,并且具有较低的限制。
-
也得到一个堆转储
标签: java garbage-collection jvm