您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關JVM的四種GC算法分別是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
程序在運行過程中,會產生大量的內存垃圾(一些沒有引用指向的內存對象都屬于內存垃圾,因為這些對象已經無法訪問,程序用不了它們了,對程序而言它們已經死亡),為了確保程序運行時的性能,java虛擬機在程序運行的過程中不斷地進行自動的垃圾回收(GC)。
黑馬程序員 理論與實踐結合,解密jvm:http://yun.itheima.com/course/584.html?1912zzp
關于 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收集器一個重要的區別。
以上就是JVM的四種GC算法分別是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。