我怎么知道谁调用System.gc()?

Aar*_*lla 7 java logging garbage-collection stack-trace

在正在运行的系统中,我们看到许多"Full GC(System)"表示有人触发System.gc().

有没有办法找出代码中的这个位置?

我确实搜索了所有可用的源,但没有发现任何可疑因此它必须在某个地方,可能是另一个在同一个容器或容器本身运行的应用程序.

Pet*_*rey 8

您可以更改Runtime类以记录将gc()调用到文件的位置(System.gc()调用Runtime.gc())

为此,编辑副本,编译并将其添加到您的 -Xbootclasspath/p:

然而,大量的Full GC更可能是由于幸存者空间不足或完整的终身空间.

你能试试跑吗?

jstat -gccause {pid} 5s 
Run Code Online (Sandbox Code Playgroud)