1. 程式人生 > >JVM效能調優2:JVM效能調優引數整理

JVM效能調優2:JVM效能調優引數整理

關閉新生代收集擔保。
在一次理想化的minor gc中,Eden和First Survivor中的活躍物件會被複制到Second Survivor。然而,Second Survivor不一定能容納下所有從E和F區copy過來的活躍物件。為了確保minor gc能夠順利完成,GC需要在年老代中額外保留一塊足以容納所有活躍物件的記憶體空間。這個預留操作,就被稱之為新生代收集擔保(New Generation Guarantee)。如果預留操作無法完成時,仍會觸發major gc(full gc)。
為什麼要關閉新生代收集擔保?
因為在年老代中預留的空間大小,是無法精確計算的。為了確保極端情況的發生,GC參考了最壞情況下的新生代記憶體佔用,即Eden+First Survivor。這種策略無疑是在浪費年老代記憶體,從時序角度看,還會提前觸發Full GC。為了避免如上情況的發生,JVM允許開發者手動關閉新生代收集擔保。在開啟本選項後,minor gc將不再提供新生代收集擔保,而是在出現survior或年老代不夠用時,丟擲promotion failed異常。