《Java效能優化權威指南》的邊邊角(1)——如果你發現日誌中只有Full GC

丁曉昀發表於2014-02-12

《Java效能優化權威指南》的邊邊角(1)——如果你發現日誌中只有Full GC

本文摘自《Java效能優化權威指南》第7章“JVM效能調優入門”,這一章介紹了一些非常實用的調優技巧。本文節選的是正文裡穿插的一個小TIP。


如果修改老年代空間大小後,只觀察到Full GC,很可能是老年代與新生代空間大小失去了平衡,導致應用程式只進行Full GC。這一情況通常緣於即使經過Full GC,老年代空間仍不足以容納所有從新生代提升的物件。通過GC統計日誌中的以下資訊可以確認這種問題:

  2010-12-06T15:10:11.231-0800: [Full GC 
      [PSYoungGen: 196608K->146541K(229376K)] 
      [ParOldGen: 262142K->262143K(262144K)] 
      458750K->408684K(491520K) 
      [PSPermGen: 26329K->26329K(32768K)], 
      17.0440216 secs] 
      [Times: user=11.03 sys=0.11, real=17.04 secs] 
  2010-12-05T15:10:11.853-0800: [Full GC 
      [PSYoungGen: 196608K->148959K(229376K)] 
      [ParOldGen: 262143K->262143K(262144K)] 
      458751K->411102K(6291456K) 
      [PSPermGen: 26329K->26329K(32768K)], 
      18.1471123 secs] 
      [Times: user=12.13 sys=0.12, real=18.15 secs]
  2010-12-05T15:10:12.099-0800: [Full GC 
      [PSYoungGen: 196608K->150377K(229376K)] 
      [ParOldGen: 262143K->262143K(262144K)] 
      458751K->412520K(6291456K) 
      [PSPermGen: 26329K->26329K(32768K)], 
      17.8130416 secs] 
      [Times: user=11.97 sys=0.12, real=17.81 secs]

標識老年代空間不夠大的一個線索是每次Full GC後,老年代中幾乎沒有任何空間被回收(ParOldGen標識右邊的值)於此同時,新生代中總有大量的物件佔用空間。當老年代中空間無法接納從新生代中提升的物件時,正如我們在上面的輸出中觀察到的,這些物件會被“退還”(Back Up)到新生代空間中。

《Java效能優化權威指南》的邊邊角(2)——理解JVM-系統鎖

《Java效能優化權威指南》的邊邊角(3)——生存代和記憶體洩漏

《Java效能優化權威指南》的邊邊角(4)——封面吉祥物Duke

《Java效能優化權威指南》的邊邊角(5)——被我們搬運的豆瓣讀書筆記

相關文章