標籤:java記憶體回收 gc jvm記憶體回收機制 gc介紹 java虛擬機器記憶體回收
Java的記憶體配置與回收全部由JVM記憶體回收進程自動完成。與C語言不同,Java開發人員不需要自己編寫代碼實現記憶體回收。這是Java深受大家歡迎的眾多特性之一,能夠協助程式員更好地編寫Java程式。
關於這篇教程是系列第一部分。首先會解釋基本的術語,比如JDK、JVM、JRE和HotSpotVM。接著會介紹JVM結構和Java 堆記憶體結構。理解這些基礎對於理解後面的記憶體回收知識很重要。
Java關鍵術語
- JavaAPI:一系列協助開發人員建立Java應用程式的封裝好的庫。
- Java 開發套件 (JDK):一系列工具協助開發人員建立Java應用程式。JDK包含工具編譯、運行、打包、分發和監視Java應用程式。
- JAVA 虛擬機器(JVM):JVM是一個抽象的電腦結構。Java程式根據JVM的特性編寫。JVM針對特定於作業系統並且可以將Java指令翻譯成底層系統的指令並執行。JVM確保了Java的平台無關性。
- Java 運行環境(JRE):JRE包含JVM實現和Java API。
Java HotSpot 虛擬機器
每種JVM實現可能採用不同的方法實現記憶體回收機制。在收購SUN之前,Oracle使用的是JRockit JVM,收購之後使用HotSpot JVM。目前Oracle擁有兩種JVM實現並且一段時間後兩個JVM實現會合二為一。
HotSpot JVM是目前Oracle SE平台標準核心組件的一部分。在這篇記憶體回收教程中,我們將會瞭解基於HotSpot虛擬機器的記憶體回收原則。
JVM體繫結構
下面圖片總結了JVM的關鍵組件。在JVM體繫結構中,與記憶體回收相關的兩個主要組件是堆記憶體和記憶體回收行程。堆記憶體是記憶體資料區,用來儲存運行時的對象執行個體。記憶體回收行程也會在這裡操作。現在我們知道這些組件是如何在架構中工作的。
Java堆記憶體
我們有必要瞭解堆記憶體在JVM記憶體模型的角色。在運行時,Java的執行個體被存放在堆記憶體地區。當一個對象不再被引用時,滿足條件就會從堆記憶體移除。在記憶體回收進程中,這些對象將會從堆記憶體移除並且記憶體空間被回收。堆記憶體以下三個主要區域:
- 新生代(Young Generation)
- Eden空間(Eden space,任何執行個體都通過Eden空間進入運行時記憶體地區)
- S0 Survivor空間(S0 Survivor space,存在時間長的執行個體將會從Eden空間移動到S0 Survivor空間)
- S1 Survivor空間 (存在時間更長的執行個體將會從S0 Survivor空間移動到S1 Survivor空間)
- 老年代(Old Generation)執行個體將從S1提升到Tenured(終身代)
- 永久代(Permanent Generation)包含類、方法等細節的元資訊
永久代空間在Java SE8特性中已經被移除。
原文連結: javapapers 翻譯: ImportNew.com - 好好先生
譯文連結: http://www.importnew.com/13504.html
Java記憶體回收