Из исходного кода OpenJDK я бы сказал, что это
const bool is_system_gc = gc_cause == GCCause::_java_lang_system_gc;
// This is useful for debugging but don't change the output the
// the customer sees.
const char* gc_cause_str = "Full GC";
if (is_system_gc && PrintGCDetails) {
gc_cause_str = "Full GC (System)";
}
Я создал пользовательскую версию класса Runtime для записи имени потока и трассировки стека в файл всякий раз, когда Runtime.getRuntime (). Gc() назывался.(System.gc () вызывает это) Я обнаружил, что это полезно для отслеживания и удаления таких вызывающих абонентов.
В одном месте это происходит в классе sun.misc.GC.RMI попросит этот класс убедиться, что GC выполнялся в течение последних N секунд.Если GC не было, он запускает полный GC.
Это проявляется только как проблема, если вы уменьшаете количество второстепенных GC.По иронии судьбы это может означать, что вы получаете более полный сборщик мусора.;)
Я не использую RMI (за исключением, возможно, JConsole), поэтому я установил его на неделю.(Думаю, что по умолчанию час)
-Dsun.rmi.dgc.server.gcInterval=604800000
-Dsun.rmi.dgc.client.gcInterval=604800000