I've searched for "secs" in the source code of JDK 1.6 update 23 (most recent 1.6 version I could find it for) and for regex "[^"]*->[^"]*" through the GC code folders in hope of finding a lead. I've also searched through the OpenJDK 1.7 code. Then I tried searching the entire HotSpot folder for "[^"]*->[^"]*"?.*secs. Yet, the only line of GC logging I've found that seems remotely related to what you're seeing is
gclog_or_tty->print("[%s-concurrent-%s: %3.3f/%3.3f secs]",
_collector->cmsGen()->short_name(),
_phase, _collector->timerValue(), _wallclock.seconds());
That's in concurrentMarkSweepGeneration.cpp. It doesn't look even close to the format you've seen. Either I'm not searching very well, or something changed in between update 23 and update 25 regarding GC logging.
If anyone has a clearer idea of where to look or what to search on, I'll be glad to oblige.
EDIT: wait, found something starting at line 827 of concurrentMarkSweepGeneration.cpp:
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);
}
}
And that function's being called only here:
void CMSCollector::do_CMS_operation(CMS_op_type op) {
gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps);
TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty);
TraceTime t("GC", PrintGC, !PrintGCDetails, gclog_or_tty);
TraceCollectorStats tcs(counters());
switch (op) {
case CMS_op_checkpointRootsInitial: {
checkpointRootsInitial(true); // asynch
if (PrintGC) {
_cmsGen->printOccupancy("initial-mark");
}
break;
}
case CMS_op_checkpointRootsFinal: {
checkpointRootsFinal(true, // asynch
false, // !clear_all_soft_refs
false); // !init_mark_was_synchronous
if (PrintGC) {
_cmsGen->printOccupancy("remark");
}
break;
}
default:
fatal("No such CMS_op");
}
}
It sure looks like what you're getting. I'm not so good at interpreting this code, but I'd say what you're seeing is simply a log line showing the current heap use followed by the committed heap size in parentheses, nothing more. Basically the same info but without the use before garbage collection.