Найти System.gc () в скомпилированных библиотеках - PullRequest
2 голосов
/ 01 июня 2011

Я вижу явные вызовы gc в нашем gc-log (см. Ниже).Я могу удалить вызовы с -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] 

Ответы [ 3 ]

2 голосов
/ 01 июня 2011

Я бы использовал FindBugs .Это потрясающий инструмент, в котором есть встроенное правило для явных вызовов Garbage COllection.

2 голосов
/ 01 июня 2011

Я создал пользовательскую версию класса System, которая записывает в файл трассировку стека при каждом вызове System.gc (). Это позволит вам отследить все места, где оно называется.

Он будет искать звонки в любой точке системы, включая JDK.

Одно место, куда вы получаете вызовы System.gc (), находится в модуле RMI, чтобы помочь найти удаленные удаленные объекты. Вы можете уменьшить, как часто он будет вызывать полный GC с

-Dsun.rmi.dgc.server.gcInterval=86400000
-Dsun.rmi.dgc.client.gcInterval=86400000
0 голосов
/ 01 июня 2011

Используйте профилировщики. Любой из современных профилировщиков поможет вам найти это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...