Если вы используете предоставленную JMX историю запусков GC, вы можете использовать то же самое до / после чисел, вам просто не нужно форсировать GC.
Вам просто нужно помнить, что эти прогоны GC (обычно один для старого и один для нового поколения) не находятся на регулярных интервалах, поэтому вам нужно извлечь начальное время также для построения графика (или вы строите график с использованием порядкового номера , для большинства практических целей этого было бы достаточно для заговора).
Например, на виртуальной машине Oracle HotSpot с ParNewGC, есть JMX MBean с именем java.lang:type=GarbageCollector,name=PS Scavenge
, он имеет атрибут LastGCInfo, он возвращает CompositeData последнего запуска мусорщика YG. Записывается с duration
, абсолютными startTime
и memoryUsageBefore
и memoryUsageAfter
.
Просто используйте таймер, чтобы прочитать этот атрибут. Всякий раз, когда появляется новый startTime, вы знаете, что он описывает новое событие GC, вы извлекаете информацию о памяти и продолжаете опрос для следующего обновления. (Не уверен, что можно использовать AttributeChangeNotification
.)
Совет: в вашем таймере вы можете измерить расстояние до последнего прогона ГХ, и если оно слишком велико для возобновления вашего графика, вы можете вызвать System.gc () условно. Но я бы не стал этого делать в экземпляре OLTP.