1. 程式人生 > >Java堆空間的劃分:新生代、老年代

Java堆空間的劃分:新生代、老年代

預設Eden:S0:S1=8:1:1,因此,新生代中可以使用的記憶體空間大小佔用新生代的9/10,那麼有人就會問,為什麼不直接分成兩個區,一個區佔9/10,另一個區佔1/10,這樣做的原因大概有以下幾種  1.S0與S1的區間明顯較小,有效新生代空間為Eden+S0/S1,因此有效空間就大,增加了記憶體使用率 2.有利於物件代的計算,當一個物件在S0/S1中達到設定的XX:MaxTenuringThreshold值後,會將其分到老年代中,設想一下,如果沒有S0/S1,直接分成兩個區,該如何計算物件經過了多少次GC還沒被釋放,你可能會說,在物件里加一個計數器記錄經過的GC次數,或者存在一張對映表記錄物件和GC次數的關係,是的,可以,但是這樣的話,會掃描整個新生代中的物件, 有了S0/S1我們就可以只掃描S0/S1區了.