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