jvm 为什么jmap -live会触发一个GC,而它却从不在应用程序本身中触发呢?

q9yhzks0  于 2022-11-07  发布在  其他
关注(0)|答案(1)|浏览(596)

我们正在运行Java应用程序,该应用程序用作24/7全天候运行的监督系统。我们遇到了一些内存问题,因此我创建了一个jmap转储,以便分析它。在创建了带有live标志的第二个转储后,GC也在应用程序中运行,它的内存使用率也很低(这个进程现在已经运行了6个月了)所以我的问题是为什么在jmap转储之后GC不是由进程自己运行的,进程在那之后正常运行并且它的内存使用正常?
OpenJDK运行时环境(build 11.0.7+10-post-Ubuntu-3ubuntu 1)是版本。

nhaq1z21

nhaq1z211#

“live”选项强制执行完全收集,然后尝试缩减为堆保留的内存总量。自动GC避免执行完全收集,因此保留的内存不一定会减少。具体的行为取决于您使用的GC(G1是默认值)和您可能提供的任何其他设置。

相关问题