与 JVM 完成的常规 GC 调整相比,JProfiler "Run GC" 按钮用于清理垃圾的是什么

What does JProfiler "Run GC" button uses to clean garbage compare to regular GC tuning being done by JVM

我有 java 企业应用程序,这几天消耗了更多内存,即使 GC 运行 并且我们设置了足够的参数 (ConcMarkSweepGC),它也没有释放全部内存。

当我附加 JProfiler 时,观察到每当 GC 为 运行 时,它只是清除,假设它消耗了 9GB,只有大约 1 到 1.2 GB 被清除。同时,如果我单击 JProfiler 附带的 "Run GC" 按钮,它会清除至少 6-7 GB 占用的 9 GB。

我试图了解 Jprofiler GC 与应用程序执行的常规 GC 相比有何额外之处。

以下是一些必需的详细信息: - 应用服务器:Wildfly 9 - Java 版本:Java 8 - OS: Windows 2012 - 64 位

有关此的任何帮助都会有所帮助。提前致谢。

行为因不同的 GC 算法而异,但原则上旧 Space 上的 GC 不应始终清除所有未使用的内存。在 New Space 中,我们看到了一个复制并行 GC 来对抗内存碎片,但 Old Space 应该大得多。 运行 这样的 GC 会导致长时间的 stop-the-world 暂停。您选择了 ConcMarkSweepGC,这是一个并发 GC,如果有足够的可用内存,它不会尝试执行完整的 stop-the-world GC 周期。您可能使用 JProfiler 在旧的 Space 上启动了完整的 stop-the-world GC。

如果您想详细了解它,请阅读 JVM 中的不同 GC 算法。它们有很多,它们的设计考虑了不同的目标。