每一種GC日誌有區別,但是大同小異
33.125: [GC [PSYoungGen: 3937K->904K(76288K)] 3937K->912K(251392K), 0.0009287 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
100.667: [Full GC (System.gc()) [PSYoungGen: 904K->0K(76288K)] [ParOldGen: 8K->690K(175104K)] 912K->690K(251392K), [Metaspace: 3304K->3304K(1056768K)], 0.0042467 secs] [Times: user=0.14 sys=0.00, real=0.01 secs]
Heap
PSYoungGen total 76288K, used 1966K [0x000000076af00000, 0x0000000770400000, 0x00000007c0000000)
eden space 65536K, 3% used [0x000000076af00000,0x000000076b0eba90,0x000000076ef00000)
from space 10752K, 0% used [0x000000076ef00000,0x000000076ef00000,0x000000076f980000)
to space 10752K, 0% used [0x000000076f980000,0x000000076f980000,0x0000000770400000)
ParOldGen total 175104K, used 690K [0x00000006c0c00000, 0x00000006cb700000, 0x000000076af00000)
object space 175104K, 0% used [0x00000006c0c00000,0x00000006c0caca28,0x00000006cb700000)
Metaspace used 3335K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 363K, capacity 388K, committed 512K, reserved 1048576K
-
33.125
或100.667
代表Java虛擬機啓動以來經過的秒數 -
[Gc
或[Full GC
代表停頓類型,如果有Full說明GC發生了Stop-the-World
-
(System.gc())
是因爲調用了System.gc()
方法所觸發的收集,那麼就會顯示[GC System.gc()
-
PSYoungGen
表示GC所發生的區域,顯示的區域名詞和GC收集器有關係。- Serial新生代意思是
Default New Generation
所以顯示[DefNew
- ParNew新生代意思是:
Parallel New Generation
就會變成[ParNew
- Parallel Scavenge 就會變成
[PSYoungGen
- 注:老年代
[Tenured
和永久代[Perm
同理,名稱也是由收集器決定的
- Serial新生代意思是
-
PSYoungGen
後面的3937K->904K(76288K)
- 含義:GC前內存區域已使用容量 -> GC後該內存已使用容量(該內存區域總容量)
-
方括號之外的
3937K->912K(251392K)
- 含義:GC前Java堆已使用容量 -> GC後Java堆已使用容量(Java堆總容量)
-
後面的
0.0009287 secs
就是表示該內存區域GC所佔用的時間,單位秒 -
[Times: user=0.00 sys=0.00, real=0.00 secs]
具體的時間數據,和Linux的time命令含義一致。- user:代表用戶態消耗的CPU時間
- sys:內核態消耗的CPU時間
- real:操作從開始到結束所經過的牆鍾時間(Wall Clock Time)
- CPU和牆鍾時間區別就是:牆鍾時間包括各種非運算的等待耗時,例等待磁盤I/O、等待線程阻塞。而CPU不包括這些耗時。同時如果看到user和sys超過read的時間,是正常的,因爲多線程下,會把user sys的時間進行疊加。
-
Heap 系統運行完成前的快照,其他的字面意思了
- PSYoungGen 新生代
- ParOldGen 老年代
- Metaspace永久代