新聞中心
本篇文章給大家分享的是有關(guān)JVM的四種GC算法分別是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
十載的瑞麗網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整瑞麗建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“瑞麗網(wǎng)站設(shè)計(jì)”,“瑞麗網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
程序在運(yùn)行過(guò)程中,會(huì)產(chǎn)生大量的內(nèi)存垃圾(一些沒(méi)有引用指向的內(nèi)存對(duì)象都屬于內(nèi)存垃圾,因?yàn)檫@些對(duì)象已經(jīng)無(wú)法訪問(wèn),程序用不了它們了,對(duì)程序而言它們已經(jīng)死亡),為了確保程序運(yùn)行時(shí)的性能,java虛擬機(jī)在程序運(yùn)行的過(guò)程中不斷地進(jìn)行自動(dòng)的垃圾回收(GC)。
黑馬程序員 理論與實(shí)踐結(jié)合,解密jvm:http://yun.itheima.com/course/584.html?1912zzp
關(guān)于 JVM 的 GC 算法主要有下面四種:1、引用計(jì)數(shù)算法(Reference counting)
每個(gè)對(duì)象在創(chuàng)建的時(shí)候,就給這個(gè)對(duì)象綁定一個(gè)計(jì)數(shù)器。每當(dāng)有一個(gè)引用指向該對(duì)象時(shí),計(jì)數(shù)器加一;每當(dāng)有一個(gè)指向它的引用被刪除時(shí),計(jì)數(shù)器減一。這樣,當(dāng)沒(méi)有引用指向該對(duì)象時(shí),該對(duì)象死亡,計(jì)數(shù)器為0,這時(shí)就應(yīng)該對(duì)這個(gè)對(duì)象進(jìn)行垃圾回收操作。2、標(biāo)記–清除算法(Mark-Sweep)
為每個(gè)對(duì)象存儲(chǔ)一個(gè)標(biāo)記位,記錄對(duì)象的狀態(tài)(活著或是死亡)。
分為兩個(gè)階段,一個(gè)是標(biāo)記階段,這個(gè)階段內(nèi),為每個(gè)對(duì)象更新標(biāo)記位,檢查對(duì)象是否死亡;第二個(gè)階段是清除階段,該階段對(duì)死亡的對(duì)象進(jìn)行清除,執(zhí)行 GC 操作。3、標(biāo)記–整理算法
標(biāo)記-整理法是標(biāo)記-清除法的一個(gè)改進(jìn)版。同樣,在標(biāo)記階段,該算法也將所有對(duì)象標(biāo)記為存活和死亡兩種狀態(tài);不同的是,在第二個(gè)階段,該算法并沒(méi)有直接對(duì)死亡的對(duì)象進(jìn)行清理,而是將所有存活的對(duì)象整理一下,放到另一處空間,然后把剩下的所有對(duì)象全部清除。這樣就達(dá)到了標(biāo)記-整理的目的。4、復(fù)制算法
該算法將內(nèi)存平均分成兩部分,然后每次只使用其中的一部分,當(dāng)這部分內(nèi)存滿的時(shí)候,將內(nèi)存中所有存活的對(duì)象復(fù)制到另一個(gè)內(nèi)存中,然后將之前的內(nèi)存清空,只使用這部分內(nèi)存,循環(huán)下去。
這個(gè)算法與標(biāo)記-整理算法的區(qū)別在于,該算法不是在同一個(gè)區(qū)域復(fù)制,而是將所有存活的對(duì)象復(fù)制到另一個(gè)區(qū)域內(nèi)。5、JVM不同的版本垃圾回收機(jī)制不一樣,jdk1.7和1.8新版本和老版本區(qū)別
jdk1.7和1.8舊版本Parallel Old,(老年代)
jdk1.7和1.8新版本Parallel Scavenge,(新生代)
Parallel Old 收集器
Parallel Scavenge收集器的老年代版,使用多線程與標(biāo)記–整理算法。這個(gè)收集器在jdk1.6中才開(kāi)始提供的,直到Parallel Old 收集器出現(xiàn)后,“吞吐量?jī)?yōu)先”收集器終于有了比較名副其實(shí)的應(yīng)用組合,在注重吞吐量以及CPU資源敏感的場(chǎng)合,都可以優(yōu)先考慮Parallel Scavenge加 Parallel Old收集器
Parallel Scavenge收集器
Parallel Scavenge收集器是一個(gè)新生代的手機(jī)器,使用的是復(fù)制算法的收集器,而且也是多線程的收集器。。Parallel Scavenge收集器,目標(biāo)達(dá)到一個(gè)可控制的吞吐量,使用-XX:MaxGCPauseMillus參數(shù)控制垃圾停頓時(shí)間,使用-XX:GCTimeRatio參數(shù)控制吞吐量。Parallel Scavenge收集器設(shè)置-XX:UseAdaptiveSizePolicy參數(shù),虛擬機(jī)會(huì)根據(jù)當(dāng)前系統(tǒng)的運(yùn)行情況收集性能監(jiān)控信息,動(dòng)態(tài)調(diào)整這些參數(shù)以提供最合適的停頓時(shí)間或者最大吞吐量(GC自使用的調(diào)節(jié)策略)。
自適應(yīng)調(diào)節(jié)策略也是Parallel Scavenge收集器和ParNew收集器一個(gè)重要的區(qū)別。
以上就是JVM的四種GC算法分別是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文標(biāo)題:JVM的四種GC算法分別是什么
文章出自:http://www.dlmjj.cn/article/gdogpe.html