Java GC Tutorials - Herong's Tutorial Examples - v1.12, by Herong Yang
"-Xlog:gc*=trace" - Maximum GC Logging
This section describes the garbage collection logging option '-Xlog:gc*=trace' (the maximum GC logging option), which prints log messages from all GC sources with the lowest log level of TRACE.
In this tutorial, let's try the maximum logging option "-Xlog:gc*=trace", prints out log messages in all GC sources at the lowest level:
herong> java -Xms2m -Xmx64m -Xlog:gc*=trace:gc.log GarbageCollection
Step/TotalMemory/FreeMemory/UsedMemory:
1 2031616 698408 1333208
2 3874816 1472824 2401992
3 3874816 424944 3449872
4 8970240 4441352 4528888
...
(Ctrl-C)
herong> more gc.log
[0.006s][trace][gc] MarkStackSize: 4096k MarkStackSizeMax: 16384k ...
[0.012s][info ][gc,heap] Heap region size: 1M ...
[0.012s][debug][gc,heap] Minimum heap 2097152 Initial heap 2097152...
[0.012s][trace][gc,heap,coops] Trying to allocate at address 0x0000...
[0.012s][trace][gc,barrier ] G1CardTable::G1CardTable: ...
[0.012s][trace][gc,barrier ] &_byte_map[0]: 0x000001fe0048000...
[0.012s][trace][gc,barrier ] _byte_map_base: 0x000001fdffca00...
[0.012s][trace][gc,bot ] G1BlockOffsetTable::G1BlockOffsetTab...
[0.012s][trace][gc,bot ] rs.base(): 0x000001fe00460000 r...
[0.013s][trace][gc,task ] WorkerManager::add_workers() : creat...
[0.013s][trace][gc,task ] Adding initial GC Thread(s) previous...
[0.013s][debug][gc ] ConcGCThreads: 2 offset 16 ...
[0.013s][debug][gc ] ParallelGCThreads: 8 ...
...
[0.014s][debug][gc ] Initialize mark stack with 4096 chun...
[0.014s][debug][gc,ergo,heap ] Expand the heap. requested expansion...
[0.014s][trace][gc,region ] G1HR COMMIT(FREE) [...
[0.014s][trace][gc,region ] G1HR COMMIT(FREE) [...
[0.014s][debug][gc,ihop ] Target occupancy update: old: 0B, ne...
[0.014s][debug][gc,ergo,refine] Initial Refinement Zones: green: 8,...
...
[0.015s][info ][gc ] Using G1 ...
[0.015s][info ][gc,heap,coops ] Heap address: 0x00000000fc000000, s...
[0.016s][trace][gc,metaspace ] node @0x000001fe024c4cc0: reserved=...
[0.016s][trace][gc,metaspace ] [...
[0.016s][trace][gc,metaspace ] Narrow klass base: 0x00000008000000...
[0.016s][trace][gc,metaspace ] Compressed class space size: 107374...
[0.016s][trace][gc,metaspace ] node @0x000001fe024c97d0: reserved=...
[0.016s][trace][gc,metaspace ] [0x000001fe1c680000, 0x000001fe1...
...
[0.017s][trace][gc,tlab ] ThreadLocalAllocBuffer::compute_siz...
[0.017s][trace][gc,region ] G1HR ALLOC(EDEN) [...
[0.017s][trace][gc,tlab ] TLAB: fill thread: 0x000001fe024c80...
[0.019s][trace][gc,tlab ] ThreadLocalAllocBuffer::compute_siz...
[0.019s][trace][gc,tlab ] TLAB: fill thread: 0x000001fe024c80...
[0.020s][trace][gc,metaspace,freelist] SpaceManager(): 0x000001fe02...
[0.020s][trace][gc,metaspace,freelist] SpaceManager(): 0x000001fe02...
[0.020s][trace][gc,metaspace,freelist] allowed expansion words: 230...
[0.020s][trace][gc,metaspace,freelist] Expanded non-class virtual s...
[0.020s][trace][gc,metaspace,freelist] Expanded non-class virtual s...
[0.020s][trace][gc,metaspace,freelist] SpaceManager::added chunk: ...
[0.020s][trace][gc,metaspace,freelist] Metachunk: bottom 0x000001fe...
[0.020s][trace][gc,metaspace,freelist] Free chunk total 0 count 0 ...
[0.020s][trace][gc,metaspace,freelist] allowed expansion words: 230...
[0.020s][trace][gc,metaspace,freelist] Expanded class virtual space...
[0.020s][trace][gc,metaspace,freelist] Expanded class virtual space...
[0.020s][trace][gc,metaspace,freelist] SpaceManager::added chunk: ...
[0.020s][trace][gc,metaspace,freelist] Metachunk: bottom 0x00000008...
[0.020s][trace][gc,metaspace,freelist] Free chunk total 0 count 0 ...
[0.022s][trace][gc,tlab] ThreadLocalAllocBuffer::compute_size(13) r...
[0.022s][trace][gc,tlab] TLAB: fill thread: 0x000001fe024c8000 [id:...
...
[0.033s][info ][gc ] Periodic GC disabled ...
... ...
[0.063s][trace][gc,task ] WorkerManager::add_workers() : crea...
[0.063s][trace][gc,task ] GC Thread: using 1 out of 8 workers...
[0.063s][trace][gc,task ] WorkerManager::add_workers() : crea...
[0.063s][trace][gc,task ] GC Thread: using 1 out of 8 workers...
[0.063s][trace][gc,nmethod ] oops_do_marking_epilogue ...
...
[0.063s][debug][gc,heap ] GC(0) Heap before GC invocations=0 ...
[0.063s][debug][gc,heap ] GC(0) region size 1024K, 1 young ...
[0.063s][debug][gc,heap ] GC(0) Metaspace used 329K, c...
[0.063s][debug][gc,heap ] GC(0) class space used 30K, ca...
[0.063s][trace][gc,heap,region] GC(0) Heap Regions: E=young(eden), ...
[0.063s][trace][gc,heap,region] GC(0) | 0|0x00000000fc000000, 0x0...
[0.063s][trace][gc,heap,region] GC(0) | 1|0x00000000fc100000, 0x0...
[0.063s][info ][gc,start ] GC(0) Pause Young (Normal) (G1 Evac...
[0.063s][trace][gc,task ] GC(0) WorkerPolicy::calc_default_ac...
[0.064s][trace][gc,task ] GC(0) WorkerManager::add_workers() ...
[0.064s][trace][gc,task ] GC(0) Creating additional GC Thread...
[0.064s][trace][gc,task ] GC(0) GC Thread: using 2 out of 8 w...
[0.064s][info ][gc,task ] GC(0) Using 2 workers of 8 for evac...
[0.064s][trace][gc,tlab ] GC(0) TLAB: gc thread: 0x000001fe02...
[0.064s][trace][gc,tlab ] GC(0) TLAB: gc thread: 0x000001fe02...
... ...
[0.064s][debug][gc,alloc,region] GC(0) Mutator Allocation stats, re...
[0.064s][debug][gc,age ] GC(0) Desired survivor size 524288...
[0.064s][trace][gc,ergo,cset ] GC(0) Start choosing CSet. pending...
[0.064s][trace][gc,ergo,cset ] GC(0) Add young regions to CSet. e...
[0.064s][debug][gc,ergo,cset ] GC(0) Finish choosing CSet regions...
[0.064s][trace][gc,region ] GC(0) G1HR CSET(EDEN) [...
[0.064s][trace][gc,nmethod ] GC(0) oops_do_marking_prologue ...
[0.064s][debug][gc,task,stats ] GC(0) GC Termination Stats ...
[0.064s][debug][gc,task,stats ] GC(0) elapsed --strong roots...
[0.064s][debug][gc,task,stats ] GC(0) thr ms ms % ...
[0.064s][debug][gc,task,stats ] GC(0) --- --------- --------- ----...
[0.064s][trace][gc,task ] GC(0) WorkerManager::add_workers()...
[0.064s][trace][gc,task ] GC(0) GC Thread: using 2 out of 8 ...
[0.064s][trace][gc,region ] GC(0) G1HR ALLOC(SURV) [...
[0.064s][trace][gc,nmethod ] GC(0) 116 3 java.util...
... ...
[0.065s][debug][gc,task,stats ] GC(0) 1 0.95 0.94 99....
[0.065s][debug][gc,task,stats ] GC(0) 0 1.00 0.79 79....
[0.065s][trace][gc,task ] GC(0) WorkerManager::add_workers()...
[0.065s][trace][gc,task ] GC(0) GC Thread: using 2 out of 8 ...
[0.065s][trace][gc,nmethod ] GC(0) 54 3 java.lang...
... ...
[0.065s][trace][gc,nmethod ] GC(0) 116 3 java.util...
[0.065s][trace][gc,nmethod ] GC(0) oops_do_marking_epilogue ...
[0.065s][debug][gc,ergo ] GC(0) Running G1 Clear Card Table ...
[0.065s][trace][gc,task ] GC(0) WorkerManager::add_workers()...
[0.065s][trace][gc,task ] GC(0) GC Thread: using 1 out of 8 ...
[0.066s][trace][gc,task ] GC(0) WorkerManager::add_workers()...
[0.066s][trace][gc,task ] GC(0) GC Thread: using 2 out of 8 ...
[0.066s][debug][gc,ref ] GC(0) Skipped phase1 of Reference ...
[0.066s][trace][gc,ref ] GC(0) Phase2 Soft before0 0 0 0 0 ...
[0.066s][trace][gc,ref ] GC(0) Phase2 Weak before0 81 0 0 0...
[0.066s][trace][gc,ref ] GC(0) Phase2 Final before0 0 0 0 0...
[0.066s][trace][gc,ref ] GC(0) Phase2 Final after0 0 0 0 0 ...
[0.066s][debug][gc,ref ] GC(0) Skipped phase3 of Reference ...
[0.066s][trace][gc,ref ] GC(0) Phase4 Phantom before0 14 0 ...
...
Wow! I am very impressed on how much information we can get with the maximum GC logging option "-Xlog:gc*=trace".
But getting so much information could make it difficult for us understand. So may we should raise the log level to DEBUG with "-Xlog:gc*=debug".
Table of Contents
Heap Memory Area and Size Control
►JVM Garbage Collection Logging
Garbage Collection Demo Program
Garbage Collection Logging Options
"-Xlog:gc" - Default GC Logging Level: INFO
"-Xlog:gc=trace" - Lowest GC Logging Level: TRACE
"-Xlog:gc+heap=trace" - GC+HEAP Log Messages
►"-Xlog:gc*=trace" - Maximum GC Logging
"-XX:+PrintFlagsFinal" - Print JVM Options
Introduction of Garbage Collectors
Serial Collector - "+XX:+UseSerialGC"
Parallel Collector - "+XX:+UseParallelGC"
Concurrent Mark-Sweep (CMS) Collector - "+XX:+UseConcMarkSweepGC"
Garbage First (G1) Collector - "+XX:+UseG1GC"
The Z Garbage Collector (ZGC) - "+XX:+UseZGC"
Object References and Garbage Collection
Garbage Collection Performance Test Program
Performance Tests on Serial Collector
Performance Tests on Parallel collector
Performance Tests on Concurrent collector
Performance Tests on G1 collector