JVM什麼時候回觸發YGC和FGC

2021-09-25 05:32:57 字數 729 閱讀 4394

ygc :對新生代堆進行gc。頻率比較高,因為大部分物件的存活壽命較短,在新生代裡被**。效能耗費較小。

fgc :全堆範圍的gc。預設堆空間使用到達80%(可調整)的時候會觸發fgc。以我們生產環境為例,一般比較少會觸發fgc,有時10天或一周左右會有一次。

什麼時候回觸發ygc,什麼時候會觸發fgc?

ygc的時機:

edn空間不足

fgc的時機:

1.old空間不足;

2.perm空間不足;

3.顯示呼叫system.gc() ,包括rmi等的定時觸發;

4.ygc時的悲觀策略;

5.dump live的記憶體資訊時(jmap –dump:live)。

對ygc的 觸發時機,相當的顯而易見,就是eden空間不足, 這時候就肯定會觸發ygc

對於fgc的觸發時機, old空間不足, 和perm的空間不足, 呼叫system.gc()這幾個都比較顯而易見,就是在這種情況下, 一般都會觸發gc。

最複雜的是所謂的悲觀策略,它觸發的機制是在首先會計算之前晉公升的平均大小,也就是從新生代,通過ygc變成新生代的平均大小,然後如果舊生代剩餘的空間小於晉公升大小,那麼就會觸發一次fullgc。sdk考慮的策略是, 從平均和長遠的情況來看,下次晉公升空間不夠的可能性非常大, 與其等到那時候在fullgc 不如悲觀的認為下次肯定會觸發fullgc, 直接先執行一次fullgc。而且從實際使用過程中來看, 也達到了比較穩定的效果。

layoutSubviews什麼時候觸發呼叫

ayoutsubviews在以下情況下會被呼叫 1 init初始化不會觸發layoutsubviews 2 addsubview會觸發layoutsubviews 3 設定view的frame會觸發layoutsubviews,當然前提是frame的值設定前後發生了變化 4 滾動乙個uiscroll...

Oracle 什麼時候會觸發DBWR

checkpoint會觸發dbwr寫髒塊時是根據checkpoint queue來的,而lru w是負責dbwr的其他寫出條件的觸發。dbwr作為乙個後台程序,只有在某些條件滿足了才會觸發。這些條件包括 當程序在輔助lru鍊錶和主lru鍊錶上掃瞄以查詢可以覆蓋的buffer header時,如果已經...

和 什麼時候該用

struts2中有值堆疊和堆疊上下文的概念,你用 可以看出.s標籤中用 可以取出堆疊上下文中的存放的物件.用 可以取出存在值堆疊中的action物件,直接呼叫它的方法.例如你的action如果繼承了actionsupport 那麼在頁面標籤中,用 的方式可以拿出國際化資訊.就不太清楚了.肯定也是拿這...