1. 程式人生 > >虛擬機器如何給物件分配記憶體?

虛擬機器如何給物件分配記憶體?

當建立一個物件時,需要給新生物件分配記憶體,而分配記憶體就是在堆上進行分配。在堆上進行分配的時候,可能在新生代的Eden區上,也可能在老年代中分配,具體的分配策略需要參考一些記憶體分配的規則。

優先在Eden區分配

大多數情況下,新生物件都在新生代的Eden區進行記憶體分配,當新生代Eden區沒足夠空間的時候,會觸發一次Minor GC。

大物件直接進入老年代

當一個新生物件需要大量連續空間並且物件所需空間大於-XX:PretenureSizeThreshold引數值的時候,這個物件將在老年代分配記憶體空間,這樣可以避免新生代發生大量的記憶體複製。

年齡大的存活物件進入老年代

在新生代每經過一次Minor GC,存活物件的年齡都會增加一歲,當年齡超過-XX:MaxTenuringThreshold引數值的時候,這個物件將進入老年代。

動態物件年齡判斷

如果新生代Survivor空間中相同年齡所有物件大小的總和大於Survivor空間的一半,年齡等於或超過該年齡的物件將直接進入老年代,不再等待年齡超過-XX:MaxTenuringThreshold引數值的條件進入老年代。
這裡寫圖片描述