Сборка мусора - не единственная причина, по которой JVM останавливает мир.
Вы можете посчитать и другие причины тоже.
Первый способ контроля пауз безопасной точки - это анализ журналов виртуальной машины:
- для JDK 8 и более ранних версий добавить опцию
-XX:+PrintGCApplicationStoppedTime
JVM;
- начиная с JDK 9 добавить
-Xlog:safepoint
.
Затем найдите Total time for which application threads were stopped
сообщений в файле журнала.
Второй способ - использовать недокументированный Hotspot внутренний MXBean:
sun.management.HotspotRuntimeMBean runtime =
sun.management.ManagementFactoryHelper.getHotspotRuntimeMBean();
System.out.println("Safepoint time: " + runtime.getTotalSafepointTime() + " ms");
System.out.println("Safepoint count: " + runtime.getSafepointCount());
Это дает вам суммарное время всех пауз JVM. См. Обсуждение в этот ответ .