Сборка мусора Java - Как найти, какой метод был запущен, когда он был вызван - PullRequest
1 голос
/ 01 сентября 2010

Предположим, я выполняю jvm, где сборка мусора не выполняется параллельно.То есть, когда GC выполняет мой основной поток останавливается.

Есть ли способ, которым я могу указать, какой метод был запущен в тот момент, когда был вызван GC?Я знаю, что могу получить информацию о времени, но этого недостаточно.Я предполагаю, что JVM легко предоставит такую ​​информацию профилирования, поскольку это будет лишь вопрос возврата самого верхнего элемента (фрейма стека) каждого стека остановленного потока.

Ответы [ 3 ]

4 голосов
/ 02 сентября 2010

Полагаю, вы хотите убедиться, что сборка мусора не повлияет на ваш сравнительный анализ.Некоторые идеи:

  1. Сборка мусора является частью вашего программного обеспечения, она всегда будет влиять на ваше программное обеспечение, поэтому она должна быть представлена ​​в вашем тесте.самые медленные 3% результатов.
  2. Вызовите System.gc () непосредственно перед запуском таймера.
2 голосов
/ 01 сентября 2010

Обычно нет. Если вы можете , то это расширение для конкретного поставщика.

Вопрос в том, почему вы хотите знать?

0 голосов
/ 02 сентября 2010

Если вы дали доступ к JMX, вы можете увидеть потребление памяти, а там, где есть всплеск, есть также сборщик мусора.

Не совсем точно узнать, какой метод был запущен, но из верхней части стека вы всегда можете получить String.equals () и ничего не знать.

...