以下是深入理解JVM第二版的原話(原書89頁(yè)):GC日志開頭的“[GC”和“[FullGC”說(shuō)明了這次垃圾收集的停頓類型,而不是用來(lái)區(qū)分新生代GC還是老年代GC的。如果有“Full”,說(shuō)明這次GC是發(fā)生了Stop-The-World的,例如下面這段新生代收集器ParNew的日志也會(huì)出現(xiàn)“[FullGC”(這一般是因?yàn)槌霈F(xiàn)了分配擔(dān)保失敗之類的問(wèn)題.所以才導(dǎo)致STW)。如果是調(diào)用System.gc()方法所觸發(fā)的收集,那么在這里將顯示“[FullGC(System)”。然后書的另一處(原書93頁(yè))給了一段實(shí)驗(yàn)代碼(大對(duì)象直接進(jìn)入老年代實(shí)驗(yàn)):publicclassMain{privatestaticfinalint_1MB=1024*1024;/**VM參數(shù):-verbose:gc-Xms20M-Xmx20M-Xmn10M-XX:+PrintGCDetails-XX:SurvivorRatio=8-XX:+UseSerialGC*/publicstaticvoidmain(String[]args){byte[]allocation1,allocation2,allocation3,allocation4;allocation1=newbyte[2*_1MB];allocation2=newbyte[2*_1MB];allocation3=newbyte[2*_1MB];allocation4=newbyte[4*_1MB];}}運(yùn)行結(jié)果:[GC(AllocationFailure)[DefNew:7131K->532K(9216K),0.0062845secs]7131K->6676K(19456K),0.0063600secs][Times:user=0.01sys=0.00,real=0.02secs]Heapdefnewgenerationtotal9216K,used4711K[0x00000000fec00000,0x00000000ff600000,0x00000000ff600000)edenspace8192K,51%used[0x00000000fec00000,0x00000000ff014930,0x00000000ff400000)fromspace1024K,52%used[0x00000000ff500000,0x00000000ff585388,0x00000000ff600000)tospace1024K,0%used[0x00000000ff400000,0x00000000ff400000,0x00000000ff500000)tenuredgenerationtotal10240K,used6144K[0x00000000ff600000,0x0000000100000000,0x0000000100000000)thespace10240K,60%used[0x00000000ff600000,0x00000000ffc00030,0x00000000ffc00200,0x0000000100000000)Metaspaceused2655K,capacity4486K,committed4864K,reserved1056768Kclassspaceused287K,capacity386K,committed512K,reserved1048576K其他先不看,先看GC日志開頭,這里指定使用的是Serial/SerialOld收集器組合,Serial收集器在對(duì)新生代和老年代進(jìn)行GC的時(shí)候不是會(huì)出現(xiàn)STW現(xiàn)象的嗎???如果按照最上邊說(shuō)的“如果有“Full”,說(shuō)明這次GC是發(fā)生了Stop-The-World的”,這個(gè)GC日志的開頭為什么不是[FullGC而是[GC???
急求?。。?!GC日志開頭的"[GC"和"[Full GC"到底表示什么?求解答!
三國(guó)紛爭(zhēng)
2019-07-27 09:35:59