Я думаю, что эта строка инициируется TraceTime
в timer.cpp, который вызывается из CMS (concurrentMarkSweepGeneration.cpp do_CMS_operation
) и ParNew (parNewGeneration.cpp collect
). Этот код кажется источником
void ConcurrentMarkSweepGeneration::printOccupancy(const char *s) {
GenCollectedHeap* gch = GenCollectedHeap::heap();
if (PrintGCDetails) {
if (Verbose) {
gclog_or_tty->print(" [%d %s-%s: "SIZE_FORMAT"("SIZE_FORMAT")]",
level(), short_name(), s, used(), capacity());
} else {
gclog_or_tty->print(" [%d %s-%s: "SIZE_FORMAT"K("SIZE_FORMAT"K)]",
level(), short_name(), s, used() / K, capacity() / K);
}
}
if (Verbose) {
gclog_or_tty->print(" "SIZE_FORMAT"("SIZE_FORMAT")",
gch->used(), gch->capacity());
} else {
gclog_or_tty->print(" "SIZE_FORMAT"K("SIZE_FORMAT"K)",
gch->used() / K, gch->capacity() / K);
}
}
Следовательно, это заявление об общей занятости кучи (сумме всех поколений) вместе с временем, прошедшим во время текущей операции GC. Печатное время выглядит как настенное время, так как таймер (os::elapsed_counter
, например, это gettimeofday
в Linux) запускается, когда создается экземпляр TraceTime
и останавливается / печатается, когда он уничтожается.
Я рекомендую вам добавить verbose:gc
, чтобы получить больше информации, если хотите.