先說個關(guān)系概念,垃圾回收的算法是邏輯概念的定義,用于規(guī)范垃圾回收器實現(xiàn)方的一些行為,而垃圾回收器就是實現(xiàn)這些算法的工具,這些工具大概是一系列的 C++ 的類以及其實現(xiàn)的一些對應(yīng)回收算法。
成都創(chuàng)新互聯(lián)自成立以來,一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、網(wǎng)站制作、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開發(fā)管理經(jīng)驗、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團(tuán)隊及專業(yè)的網(wǎng)站設(shè)計師團(tuán)隊。分代和對象流轉(zhuǎn)基本上我們常用的垃圾回收算法對于堆空間都會有 分代 這一概念,通常來說分為 年輕代 和 老年代
年輕代又下分 eden 區(qū) 和 survive0 和 survive1 區(qū)。對于一個新的對象一般來說會先進(jìn)入年輕代的 eden 區(qū),在對象的對象頭 Mark Word 中會記錄其分代年齡,大是 15 (只給了 4 bit 位來存),默認(rèn)也是 15。
通常我們說 GC 的時候又分為 年輕代的 GC 即 young gc 和 老年代的 GC 即 full gc,一般來說 young gc 耗時遠(yuǎn)低于 full gc 。我們優(yōu)化堆空間分配的過程就是要盡量避免 full gc 的過程。
在 young gc 的過程中,會對年輕代區(qū)域的對象進(jìn)行清理回收,存活下來的由 eden 進(jìn)入 s0 ,或者由 s0 進(jìn)入 s1 (或者 s1 進(jìn)入 s0 這個是標(biāo)記復(fù)制的過程)
每次 young gc 存活下來的對象分代年齡就會 +1,當(dāng)達(dá)到 15 時(這個可以配置)。會將其移進(jìn)老年代,不在參與之后的 young gc
這意味著老年代的對象一般應(yīng)該是存活時間較長的對象。
9
基本的回收算法標(biāo)記復(fù)制
標(biāo)記復(fù)制,準(zhǔn)備兩部分區(qū)域,這兩部分區(qū)域?qū)嶋H使用只會用一部分,另一部分作為待復(fù)制空間。在垃圾回收過程中,將所有非垃圾對象直接復(fù)制到另一區(qū)域,本區(qū)域清空。 此算法清理速度較快,但空間利用率較低。
標(biāo)記清理
標(biāo)記清理算法比較暴力,標(biāo)記好垃圾對象后直接將垃圾對象刪除,這個速度也是很快的,但是會產(chǎn)生較多的內(nèi)存碎片,進(jìn)而可能影響后續(xù)的空間分配
標(biāo)記整理
標(biāo)記整理算法相對于標(biāo)記清理算法多了一步整理,這不整理會將清理后碎片化的空間整理為連續(xù)空間,當(dāng)然付出的代價是整理的耗時。
Serial -XX:+UseSerialGC -XX:+UseSerialOldGC
Serial 收集器是最基礎(chǔ)的垃圾收集器,其收集過程為單線程收集,適用于單核 CPU ,或者垃圾回收異常情況的備選方案,邏輯簡單高效。
該收集器在垃圾回收過程中會全程 STW (Stop The Word 僅垃圾回收線程工作,其他線程暫停,即用戶服務(wù)不可用)
年輕代使用算法:標(biāo)記復(fù)制
老年代使用算法:標(biāo)記整理
Parallel -XX:+UseParallelGC(年輕代),-XX:+UseParallelOldGC(老年代)
Parallel 相當(dāng)于是 Serial 的多線程版,多線程收集效率更高 STW 時間更短,適用于多核 CPU, 4G 左右內(nèi)存回收都是 OK 的。
年輕代使用算法:標(biāo)記復(fù)制
老年代使用算法:標(biāo)記整理
進(jìn)階常用垃圾收集器 ParNew + CMS & G1ParNew -XX:+UseParNewGC
這個玩意,和 Parallel 是一樣的,它的誕生是為了兼容配合 CMS 進(jìn)行垃圾收集,CMS 是老年代的垃圾收集器,它只負(fù)責(zé)老年代的垃圾收集。
CMS
重頭戲,CMS 是 Concurrent Mark Sweep 并發(fā)標(biāo)記清除 ,CMS 進(jìn)行垃圾回收分以下步驟
CMS 對于 8G 以內(nèi)的內(nèi)存處理表現(xiàn)良好,高于 8G 推薦使用 G1
大家應(yīng)該看出來了,垃圾收集器的迭代在于想優(yōu)化 STW 的時間,使其盡量短或者可控
G1 我公司線上服務(wù)就配置的這個
Garbage First 這個適用于大內(nèi)存的垃圾收集 32G 以內(nèi)效果比較好 (PS 不建議內(nèi)存分配超過 32G 內(nèi)存,否則默認(rèn)的指針壓縮將會失效)
并且 G1 在區(qū)域劃分上進(jìn)行了改變,它將整個堆空間劃分為多個 Region 區(qū)域默認(rèn)是堆大小除以 2048,而分代的區(qū)域不再是固定的區(qū)域,而是隨著垃圾收集動態(tài)調(diào)整。并增加了大對象區(qū)的概念,如果一個對象被認(rèn)定為大對象(超出 Region 區(qū)的 50%)則直接放到大對象區(qū) Humongous 此區(qū)域會在 full gc 時回收
G1 垃圾回收對于 CMS 的優(yōu)點就是可控的 STW 時間,并且因為沒有物理隔離年輕代、老年代、存活區(qū),G1 的所有垃圾回收方式都可以使用標(biāo)記復(fù)制進(jìn)行,速度極快
G1 垃圾回收分為以下過程:
G1 的垃圾收集分三類
young gc : eden 區(qū)滿切預(yù)計回收時間接近 -XX:MaxGCPauseMills 配置的暫停時間則進(jìn)行新生代回收,否則嘗試擴(kuò)容 eden 區(qū)
mixed gc : 混合 gc 在收集區(qū)域上類似 CMS 的 full gc ,會回收 young 和 old 以及 humongous
full gc: 這個更像是最終解決方案,當(dāng) mixed gc 都無法正常釋放空間時,將進(jìn)入并發(fā)失敗進(jìn)行單線程的 full gc 全程 STW
之前些了篇詳解感興趣可以看看,這里不在贅述 JVM 垃圾收集器 G1 詳解
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享題目:【Java快速復(fù)習(xí)】垃圾回收算法&垃圾回收器-創(chuàng)新互聯(lián)
鏈接地址:http://m.rwnh.cn/article8/iidip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、全網(wǎng)營銷推廣、網(wǎng)站維護(hù)、動態(tài)網(wǎng)站、域名注冊、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容