JVM的四種GC演算法
程式在執行過程中,會產生大量的記憶體垃圾(一些沒有引用指向的記憶體物件都屬於記憶體垃圾,因為這些物件已經無法訪問,程式用不了它們了,對程式而言它們已經死亡),為了確保程式執行時的效能,java虛擬機器在程式執行的過程中不斷地進行自動的垃圾回收(GC)。
黑馬程式設計師 理論與實踐結合,解密jvm:
關於 JVM 的 GC 演算法主要有下面四種:
1、引用計數演算法(Reference counting)
每個物件在建立的時候,就給這個物件繫結一個計數器。每當有一個引用指向該物件時,計數器加一;每當有一個指向它的引用被刪除時,計數器減一。這樣,當沒有引用指向該物件時,該物件死亡,計數器為0,這時就應該對這個物件進行垃圾回收操作。
2、標記–清除演算法(Mark-Sweep)
為每個物件儲存一個標記位,記錄物件的狀態(活著或是死亡)。
分為兩個階段,一個是標記階段,這個階段內,為每個物件更新標記位,檢查物件是否死亡;第二個階段是清除階段,該階段對死亡的物件進行清除,執行 GC 操作。
3、標記–整理演算法
標記-整理法是標記-清除法的一個改進版。同樣,在標記階段,該演算法也將所有物件標記為存活和死亡兩種狀態;不同的是,在第二個階段,該演算法並沒有直接對死亡的物件進行清理,而是將所有存活的物件整理一下,放到另一處空間,然後把剩下的所有物件全部清除。這樣就達到了標記-整理的目的。
4、複製演算法
該演算法將記憶體平均分成兩部分,然後每次只使用其中的一部分,當這部分記憶體滿的時候,將記憶體中所有存活的物件複製到另一個記憶體中,然後將之前的記憶體清空,只使用這部分記憶體,迴圈下去。
這個演算法與標記-整理演算法的區別在於,該演算法不是在同一個區域複製,而是將所有存活的物件複製到另一個區域內。
5、JVM不同的版本垃圾回收機制不一樣,jdk1.7和1.8新版本和老版本區別
jdk1.7和1.8舊版本Parallel Old,(老年代)
jdk1.7和1.8新版本Parallel Scavenge,(新生代)
Parallel Old 收集器
Parallel Scavenge收集器的老年代版,使用多執行緒與標記–整理演算法。這個收集器在jdk1.6中才開始提供的,直到Parallel Old 收集器出現後,“吞吐量優先”收集器終於有了比較名副其實的應用組合,在注重吞吐量以及CPU資源敏感的場合,都可以優先考慮Parallel Scavenge加 Parallel Old收集器
Parallel Scavenge收集器
Parallel Scavenge收集器是一個新生代的手機器,使用的是複製演算法的收集器,而且也是多執行緒的收集器。。Parallel Scavenge收集器,目標達到一個可控制的吞吐量,使用-XX:MaxGCPauseMillus引數控制垃圾停頓時間,使用-XX:GCTimeRatio引數控制吞吐量。Parallel Scavenge收集器設定-XX:UseAdaptiveSizePolicy引數,虛擬機器會根據當前系統的執行情況收集效能監控資訊,動態調整這些引數以提供最合適的停頓時間或者最大吞吐量(GC自使用的調節策略)。
自適應調節策略也是Parallel Scavenge收集器和ParNew收集器一個重要的區別。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69915785/viewspace-2670571/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- GC的四種清理演算法GC演算法
- JVM(六)——GC 演算法JVMGC演算法
- 【JVM第八篇--垃圾回收】GC和GC演算法JVMGC演算法
- JVM的GC日誌JVMGC
- jvm系列(三)GC演算法 垃圾收集器JVMGC演算法
- JVM 系列文章之 GC 演算法淺析JVMGC演算法
- 聊一聊 JVM 的 GCJVMGC
- JVM系列之GCJVMGC
- jvm系列(三):java GC演算法 垃圾收集器JVMJavaGC演算法
- Android GC,JVM MinorGC/ MajorGC/ FullGC,GC目的AndroidGCJVM
- 【JVM】垃圾回收的四大演算法JVM演算法
- JVM+GC 面試題JVMGC面試題
- JVM之GC趣解JVMGC
- JVM GC日誌解析JVMGC
- jvm系列:Java GC 分析JVMJavaGC
- JVM 系列文章之 Full GC 和 Minor GCJVMGC
- JVM培訓之一些GC演算法的理論知識JVMGC演算法
- JVM記憶體GC的騙局JVM記憶體GC
- 聊聊JVM的垃圾回收機制GCJVMGC
- JVM 自動記憶體管理機制及 GC 演算法JVM記憶體GC演算法
- JVM 虛擬機器 GCJVM虛擬機GC
- JVM GC 日誌詳解JVMGC
- JVM記憶體-GC策略JVM記憶體GC
- 為什麼 JVM 需要 GCJVMGC
- jvm系列(九):Java GC 分析JVMJavaGC
- 最詳細的JVM&GC講解JVMGC
- 深入理解JVM(四)——垃圾回收演算法JVM演算法
- php常用的四種排序演算法PHP排序演算法
- 深入淺出之JVM GC篇JVMGC
- 【深入理解JVM】8、JVM實戰調優+GC演算法+JVM調優如何定位問題+常見的定位JVM優化命令【面試必備】JVMGC演算法優化面試
- JVM中記憶體和GC的介紹JVM記憶體GC
- “阿里架構師”的JVM之GC詳解阿里架構JVMGC
- 使用 jstat 命令檢視 JVM 的GC資訊JSJVMGC
- JVM系列(五):gc實現概要01JVMGC
- 探探Java之 JVM GC與調優JavaJVMGC
- 「入門篇」初識JVM (下下) - GCJVMGC
- 秋招乾貨 - JVM 垃圾回收(GC)JVMGC
- JVM GC 與 記憶體分配策略JVMGC記憶體