我在gc-log中看到了显式的gc调用(见下文)。我可以删除-XX:+ DisableExplicitGC的调用,但我真的想知道哪个代码/库正在调用System.gc()
?
有关如何追踪它的任何提示?
2011-05-30T12:21:48.230+0200: 1.672: [Full GC (System) 1.672: [CMS: 0K->2227K(2868864K), 0.0862299 secs] 62069K->2227K(3118080K), [CMS Perm : 12899K->12893K(409600K)], 0.0863197 secs] [Times: user=0.06 sys=0.03, real=0.09 secs]
答案 0 :(得分:2)
我会使用FindBugs。它是一个神话般的工具,它有一个显式垃圾COllection调用的内置规则。
答案 1 :(得分:2)
我创建了一个System类的自定义版本,只要调用System.gc(),它就会向文件写入堆栈跟踪。这将允许您跟踪它所调用的所有位置。
这将在系统中的任何地方找到呼叫,包括JDK。
您调用System.gc()的一个地方是在RMI模块中,以帮助查找丢弃的远程对象。您可以减少使用
调用完整GC的频率-Dsun.rmi.dgc.server.gcInterval=86400000
-Dsun.rmi.dgc.client.gcInterval=86400000
答案 2 :(得分:0)
使用分析器。任何现代的探查器都可以帮助你找到它。