JVM簡單整理

垃圾回收算法:

一.引用計數法

二.可達性算法:從GC根節點開始搜索GCRoot無法到達的對象爲垃圾對象。

可作爲GCRoot引用點的是:

 (1)JavaStack中引用的對象 ;

 (2)方法區中靜態引用指向的對象;

 (3)方法區中常量引用指向的對象;

 (4)Native方法中JNI引用的對象;

1.複製算法(對於Survivor區 S0,S1)以空間爲代價,沒有碎片

2.標記---清除法  缺點:產生大量不連續的碎片

3.標記---整理算法

根據老年代特點出的一種標記算法,標記過程仍與“標記清除”算法一樣,但後續步驟不是直接回收對象,而是讓所有存活的對象向一端移動,然後直接清除掉端邊界以外的內存。 

4.分代收集算法

根據堆中劃分爲不同的區域,以其各自特點選擇合適的算法。

==========================分割線============================================

垃圾收集器

 

Serial:串行收集器,單線程 

 ParNew:爲Serial的多線程版本,除使用多線程外,其餘(控制參數,收集算法,回收策略等)均與Serial一致,多核情況下優勢明顯。

默認爲新生代收集器

Parallel Scavenge:是一款新生代收集器,使用複製算法,該收集器關注的是一個可控的吞吐量,被稱爲:“吞吐量優先”收集器。

吞吐量:CPU運行用戶代碼的時間與CPU總耗時的比值,即:

Parallel Scavenge提供了2個參數控制吞吐量:

-XX:MaxGCPauseMillis 最大垃圾收集停頓時間

-XX:GCTimeRatio          直接設置吞吐量

ParallelScavenge還提供了一個參數:-XX:+UseAdaptiveSizePolicy

這是一個開關參數,當這個開關打開後就不用手動指定新生代大小(-Xmn),Eden,Survivor區比例(-XX:SurvivorRatio),晉升老年代對象年齡(-XX:PretenureSizeThreshold)等參數,虛擬機會根據當前系統的運行情況收集性能監控信息,動態調整這些參數以提供最合適的停頓時間或者最大的吞吐量,這種機制叫作:GC自適應調節策略(GC Ergonomics)。

注:如對收集器運作不太瞭解,手工優化存在困難的時候,使用ParallelScavenge收集器配合自適應調節策略,只需設置好基本的內存參數:如-XX:Xmx設置最大堆 ,然後使用MaxGCPauseMillis參數設置對大停頓時間,或者GCTimeRatio設置吞吐量給VM設立一個優化目標,具體細節參數調整的工作由虛擬機完成。

自適應調節策略也是ParallelScavenge收集器和ParNew收集器的一個重要區別。

CMS:(Concurrent Mark Sweep)CMS收集器是一種以收穫最短回收停頓時間爲目標的收集器,非常適合於B/S系統這種重視服務的響應速度,希望系統停頓時間最短的系統中。

基於“標記清除”算法,整個過程分爲4個步驟:

1.初始標記(CMS initial mark)STW

2.併發標記(CMS concurrent mark)

3.重新標記(CMS remark)STW

4.併發清除(CMS concurrent sweep)

優點併發收集,低停頓  。

缺點佔用大量CPU資源,無法處理浮動垃圾,出現concurrent Mode Failure空間碎片。

G1:G1收集器,

優勢:併發和並行,

分代收集

空間整合:從整體看是基於“標記整理”算法實現,不產生空間碎片。

可預測停頓:相對於CMS,G1降低了停頓時間,同時還建立可預測停頓時間模型,G1將Java堆劃分爲多個大小相等的獨立區域(Region),雖然保留着新生代和老年代的概念,但是新生代和老年代不再是物理隔離,它們都是一部分Region(不需要連續)的集合。(化整爲零)

===============================分割線======================================

垃圾收集器搭配

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章