一. ?? 前言
Java的垃圾回收機制是自動的,不需要程序員手動進行內(nèi)存管理。當Java應用程序創(chuàng)建對象時,它們存儲在堆內(nèi)存中。當對象不再被引用時,垃圾回收器會自動標記這些對象為垃圾,并將它們從堆內(nèi)存中清除,釋放空間。
二. ?? 如何判斷一個對象是垃圾
Ⅰ. 引用計數(shù)法
如果要操作對象,必須通過引用來進行。如果一個對象沒有任何引用與之關(guān)聯(lián),則說明該對象基本不太可能在其他地方被使用到。那么這個對象就成為可被回收的對象了。這種方式實現(xiàn)簡單,效率較高,但是它無法解決循環(huán)引用的問題,因此在 Java 中并沒有采用這種方式(Python 采用的是引用計數(shù)法)
Ⅱ. 可達性分析
以一個 GC Root 對象作為起點進行搜索,如果在 GC Roots 和對象之間沒有可達路徑,則稱該對象是不可達的。
Ⅲ. GC ROOT 對象
- 棧幀中的本地變量表中引用的對象。
- 方法區(qū)中靜態(tài)屬性引用的對象。
- 方法區(qū)中常量引用的對象。
- 本地方法棧中引用的對象。
三. ?? 垃圾回收算法
Ⅰ. 標記——清除算法
效率較低,有空間碎片。Old 區(qū)使用的算法
Ⅱ. 復制算法
空間碎片少,但會浪費空間。存活對象較少才會使用的算法。young區(qū)使用的算法
Ⅲ. 標記——整理算法:
空間碎片少,效率較低。Old 區(qū)使用的算法
四. ?? 垃圾收集器的評判標準
垃圾收集器是對垃圾回收算法的實現(xiàn),JVM 中提供了很多垃圾收集器,我們?nèi)绾卧u判一個垃圾收集器的好壞呢?
- 垃圾收集器的執(zhí)行效率 = 吞吐量 / 停頓時間
- 吞吐量 = 用戶代碼執(zhí)行時間/(用戶代碼執(zhí)行時間+停頓時間)
五. ?? 垃圾收集器的類型
Ⅰ. 串行收集器
只有一個垃圾回收線程,在垃圾回收時暫停用戶代碼線程,如 Serial 和 Serial Old收集器。
Ⅱ. 并行收集器
吞吐量優(yōu)先,多個垃圾收集器線程共同工作, 盡快完成垃圾收集。如 ParNew,Parallel Scanvenge, Parallel Old 收集器。
Ⅲ. 并發(fā)收集器
停頓時間優(yōu)先,用戶線程和垃圾回收線程一同工作,用戶代碼線程也會完全停止一小段時間,如 CMS,G1 收集器
六. ?? CMS 收集器
CMS(concurrent mark sweep,并發(fā)標記掃描)收集器是并發(fā)收集器,是基于標記 ——清理的算法進行垃圾回收,用于 OldGC。
- 優(yōu)點:并發(fā)收集、低停頓
- 缺點:會產(chǎn)生大量空間碎片,停頓時間雖然短但是不可控。
問:CMS 收集器為什么不進行并發(fā)的初始標記?
因為初始標記速度很快,不值得多開線程,開線程也是需要耗費資源的。
七. ?? G1 收集器
- G1(garbage first,垃圾優(yōu)先)收集器是并發(fā)收集器,從 JDK1.7 開始支持,能進行OldGC 和 YoungGC。Old 區(qū)采用標記整理算法,Young 區(qū)采用復制算法。
- G1 收集器沒有固定的 Old、Young、Eden、Survivor 區(qū),而是將內(nèi)存分為一個個大小相等的 Region(格子,1Mb~32Mb)。每次垃圾回收后,Region 的用途可以發(fā)生改變,提高了內(nèi)存的靈活性和利用率。

G1 收集器可以根據(jù)開發(fā)者設置的參數(shù),停頓時間的期望值,優(yōu)先篩選回收存活的對象比較少,垃圾對象比較大的區(qū)域 Region,可以把更多空余的空間釋放出來。
八. ?? 如何選擇垃圾收集器?
- 優(yōu)先讓服務器自己來選擇
- 如果內(nèi)存小于 100M,使用串行收集器
- 如果服務器是單核,并且沒有停頓時間要求,使用串行收集器
- 如果允許停頓時間超過 1 秒,選擇并行收集器
- 如果停頓時間不能超過 1 秒,使用并發(fā)收集器
九. ?? Happy Ending
?? 送書抽獎活動 ??
- 系統(tǒng):全書內(nèi)容層層遞進,深入淺出,手把手教你吃透JVM虛擬機核心技術(shù)
- 深入:剖析探索JVM核心底層原理,強化推動JVM優(yōu)化落地
- 實戰(zhàn):原理與實踐相結(jié)合,懂理論,能落地,實戰(zhàn)化案例精準定位技術(shù)細節(jié)
- 資源:附贈全書案例源代碼,知其然更知其所以然,快速上手不用愁
本書主要以 Java 虛擬機的基本特性及運行原理為中心,深入淺出地分析 JVM 的組成結(jié)構(gòu)和底層實現(xiàn),介紹了很多性能調(diào)優(yōu)的方案和工具的使用方法。最后還擴展介紹了 JMM 內(nèi)存模型的實現(xiàn)原理和 Java 編譯器的優(yōu)化機制,讓讀者不僅可以學習 JVM 的核心技術(shù)知識,還能夯實 JVM 調(diào)優(yōu)及代碼優(yōu)化的技術(shù)功底。
本書適合已具有一定 Java 編程基礎的開發(fā)人員、項目經(jīng)理、架構(gòu)師及性能調(diào)優(yōu)工程師參考閱讀,同時,本書還可以作為廣大職業(yè)院校、計算機培訓班相關(guān)專業(yè)的教學參考用書。文章來源:http://www.zghlxwxcb.cn/news/detail-549762.html
本次活動贈書2本,評論區(qū)抽取2位小伙伴送書
活動時間: 截止到2023-07-15 20: 00 參與方式: 點贊、收藏本文章,并任意評論(不折疊就行) 抽獎時間: 2023.07.15 公布時間: 2023.7.15 通知方式:交流群內(nèi)公布或私信通知
更多活動可繼續(xù)關(guān)注上方??的博客,好運總會輪到你!??!文章來源地址http://www.zghlxwxcb.cn/news/detail-549762.html
到了這里,關(guān)于【JVM】| 垃圾回收機制 | 文末送書的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!