JVM/GC

JVM

JVM的主要組成

image.png

JVM包含兩個子系統(tǒng)和兩個組件,兩個子系統(tǒng)為Class loader(類裝載)、Execution engine(執(zhí)行引擎);兩個組件為Runtime data area(運行時數(shù)據(jù)區(qū))、Native Interface(本地接口)。

Class loader(類裝載):根據(jù)給定的全限定名類名(如:java.lang.Object)來裝載class文件到Runtime data area中的method area。

  • Execution engine(執(zhí)行引擎):執(zhí)行classes中的指令。

  • Native Interface(本地接口):與native libraries交互,是其它編程語言交互的接口。

  • Runtime data area(運行時數(shù)據(jù)區(qū)域):這就是我們常說的JVM的內(nèi)存。

作用 :首先通過編譯器把 Java 代碼轉(zhuǎn)換成字節(jié)碼,類加載器(ClassLoader)再把字節(jié)碼加載到內(nèi)存中,將其放在運行時數(shù)據(jù)區(qū)(Runtime data area)的方法區(qū)內(nèi),而字節(jié)碼文件只是 JVM 的一套指令集規(guī)范,并不能直接交給底層操作系統(tǒng)去執(zhí)行,因此需要特定的命令解析器執(zhí)行引擎(Execution Engine),將字節(jié)碼翻譯成底層系統(tǒng)指令,再交由 CPU 去執(zhí)行,而這個過程中需要調(diào)用其他語言的本地庫接口(Native Interface)來實現(xiàn)整個程序的功能。

GC

怎么判斷對象可以被回收

  • java語言中沒有使用引用計數(shù)法來管理內(nèi)存,其中最主要的原因是它很難解決對象之間相互循環(huán)引用的問題。

  • 可達性分析算法:從 GC Roots 開始向下搜索,搜索所走過的路徑稱為引用鏈。當一個對象到 GC Roots 沒有任何引用鏈相連時,則證明此對象是可以被回收的。(從GC Roots 到這個對象不可達時,證明此對象是不可用的)

在 java 中可以作為 GC Roots的對象有以下幾種:

  • 虛擬機棧(棧幀中本地變量表)中引用的對象

  • 方法區(qū)類靜態(tài)屬性引用的對象

  • 方法區(qū)常量池引用的對象

  • 本地方法棧 JNI (Native方法)引用的對象

垃圾收集算法

  • 標記-清除

  • 復制

  • 標記-整理

  • 分代收集算法

垃圾收集器

  • Serial收集器(復制算法): 新生代單線程收集器,標記和清理都是單線程,優(yōu)點是簡單高效

  • ParNew收集器 (復制算法): 新生代收并行集器,實際上是Serial收集器的多線程版本,在多核CPU環(huán)境下有著比Serial更好的表現(xiàn);

  • Parallel Scavenge收集器 復制算法): 新生代并行收集器,追求高吞吐量,高效利用 CPU。吞吐量 = 用戶線程時間/(用戶線程時間+GC線程時間),高吞吐量可以高效率的利用CPU時間,盡快完成程序的運算任務,適合后臺應用等對交互相應要求不高的場景;

  • Serial Old收集器 (標記-整理算法): 老年代單線程收集器,Serial收集器的老年代版本; Parallel Old收集器 (標記-整理算法): 老年代并行收集器,吞吐量優(yōu)先,Parallel Scavenge收集器的老年代版本;

  • CMS(Concurrent Mark Sweep)收集器(標記-清除算法): 老年代并行收集器,以獲取最短回收停頓時間為目標的收集器,具有高并發(fā)、低停頓的特點,追求最短GC回收停頓時間。

  • G1(Garbage First)收集器 (標記-整理算法): Java堆并行收集器,G1收集器是JDK1.7提供的一個新收集器,G1收集器基于“標記-整理”算法實現(xiàn),也就是說不會產(chǎn)生內(nèi)存碎片。此外,G1收集器不同于之前的收集器的一個重要特點是:G1回收的范圍是整個Java堆(包括新生代,老年代),而前六種收集器回收的范圍僅限于新生代或老年代。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容