擴容新生代為什麼能夠提高GC的效率

2022-09-19 15:21:10 字數 1047 閱讀 9847

該文章預設讀者對jvm的基礎有所了解

先來上圖:

大部分情況下,物件都會進入eden區進行分配,當該空間滿了以後,進行輕gc,如果物件存活,則會進入s0或者s1。

擴充套件:如何判斷物件存活

採用根可達性分析演算法來判斷

可作為根的物件有:

虛擬機器棧中引用的物件

本地方法棧中引用的物件

方法區中類靜態屬性引用的物件

方法區常量引用的物件

gc的耗時由兩部分組成:

掃瞄整個新生代所要花費的時間

將存活物件複製到倖存區的時間

所以cg耗時=t1+t2;

假設:

新生代空間 (space1): 200m,每隔5s gc一次,每次gc耗時100ms

gc=t1+t2=100ms

擴容新生代空間(space2)(兩倍): 400m,每隔10s gc一次,每次gc耗時200ms

gc=2*(t1+t2) =200ms ?(對不對)

其中我們需要考慮物件a的存活時間,它會影響到t2時間。

在space1中 gc的時候物件a是存活的,那麼就需要對物件進行移動,所以space1中的gc=t1+t2。

在space2中gc的時候物件a變為垃圾,那麼就不需要對垃圾進行移動,所以在space2中的gc=2*t1;

在垃圾**演算法中,jvm中移動記憶體物件的耗時比掃瞄(演算法有優化)整個新生代的耗時是遠遠高於的。(前提條件)

由此可以得出,擴大新生代確實能夠提高gc的效率,其中起決定的因素不是空間的大小,而是存活物件的大小;

增加整個空間的大小,可以拉長gc的間隔,從而盡可能的使得物件變為垃圾,來減少記憶體的移動。

為什麼要公升級換代為牛皮涼蓆

隨著中國經濟條件改善,我們都可以追求更舒適的生活方式,生活品質和健康在不斷提公升,牛皮席成為家中涼蓆更新換代的首選。牛皮席好處不言而喻,不僅材質柔軟舒適涼爽,可使用很多年,而且保養打理非常簡單,是大部分消費者選擇的原因。今天就來盤點牛皮席的優勢特點。牛皮席涼爽柔軟,好舒適 牛皮席是很涼爽的。牛皮席由...

大資料時代 為什麼用HADOOP?

自 大 說的並不僅是資料的 多 不能用資料到了多少tb 多少pb 來說。對於大資料,可以用四個詞來表示 大量,多樣,實時,價值。實時 大資料需要快速的,實時的進行處理。如果說對時間要求低,那弄幾個機器,對小資料進行處理,等個十天半月的出來結果,這樣也沒有什麼意義了。有價值 資料中,存在著價值。資料,...

sudo cd為什麼不能夠執行

我想要cd到 etc docker,但是它給我乙個許可權不夠的錯誤,然後,我想到使用sudo cd etc docker時,它告訴我sudo cd 找不到命令。於是,鬱悶的我就去上網找了下原因。cd不是乙個應用程式而是linux內建的命令,而sudo僅僅只對應用程式起作用。sudo foo只意味著以...