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實現和javaapi。
javahotspot虛擬機
每種jvm實現可能采用不同的方法實現垃圾回收機制。在收購sun之前,oracle使用的是jrockitjvm,收購之后使用hotspotjvm。目前oracle擁有兩種jvm實現并且一段時間后兩個jvm實現會合二為一。
hotspotjvm是目前oraclese平臺標準核心組件的一部分。在這篇垃圾回收教程中,我們將會了解基于hotspot虛擬機的垃圾回收原則。
jvm體系結構
下面圖片總結了jvm的關鍵組件。在jvm體系結構中,與垃圾回收相關的兩個主要組件是堆內存和垃圾回收器。堆內存是內存數據區,用來保存運行時的對象實例。垃圾回收器也會在這里操作。現在我們知道這些組件是如何在框架中工作的。
java堆內存
我們有必要了解堆內存在jvm內存模型的角色。在運行時,java的實例被存放在堆內存區域。當一個對象不再被引用時,滿足條件就會從堆內存移除。在垃圾回收進程中,這些對象將會從堆內存移除并且內存空間被回收。堆內存以下三個主要區域:
新生代(younggeneration)
eden空間(edenspace,任何實例都通過eden空間進入運行時內存區域)
s0survivor空間(s0survivorspace,存在時間長的實例將會從eden空間移動到s0survivor空間)
s1survivor空間(存在時間更長的實例將會從s0survivor空間移動到s1survivor空間)
老年代(oldgeneration)實例將從s1提升到tenured(終身代)
永久代(permanentgeneration)包含類、方法等細節的元信息
永久代空間在java8特性中已經被移除。
總結
以上就是本文關于簡單介紹java垃圾回收機制的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
原文鏈接:http://www.importnew.com/13504.html