Если вам подходит решение, которое работает с Oracle 8 Java JVM, и может работать с другими, вы можете использовать расширение GarbageCollectorMXBean
платформы . Я связался с документацией JDK 11, так как этот класс не включен в документацию JDK 8, но этот тип присутствует, и работает следующее решение.
final RuntimeMXBean rt = ManagementFactory.getRuntimeMXBean();
long base = rt.getStartTime();
for(GarbageCollectorMXBean gc: ManagementFactory.getGarbageCollectorMXBeans()) {
if(gc instanceof com.sun.management.GarbageCollectorMXBean) {
com.sun.management.GcInfo info =
((com.sun.management.GarbageCollectorMXBean)gc).getLastGcInfo();
if(info != null) {
System.out.printf("%-15s%tF %2$tT.%2$tL (%6dms ago)%n",
gc.getName(), base + info.getStartTime(), rt.getUptime()-info.getStartTime());
}
}
}
Когда я добавил,
System.gc();
System.out.println(System.getProperty("java.version"));
для простого запуска я получил
1.8.0_131
PS Scavenge 2019-04-09 11:58:25.808 ( 50ms ago)
PS MarkSweep 2019-04-09 11:58:25.809 ( 74ms ago)
Эту информацию также можно запрашивать удаленно, см. Также Способы доступа к MXBeans . Он работает, если в JVM агент управления уже запущен или доступен через API присоединения (обычно подразумевается запуск на том же компьютере), поэтому агент управления можно запустить позже. Эти параметры также используются такими инструментами, как VisualVM.