簡單介紹Java垃圾回收機(jī)制
Java的內(nèi)存分配與回收全部由JVM垃圾回收進(jìn)程自動完成。與C語言不同,Java開發(fā)者不需要自己編寫代碼實現(xiàn)垃圾回收。這是Java深受大家歡迎的眾多特性之一,能夠幫助程序員更好地編寫Java程序。
這篇教程是系列第一部分。首先會解釋基本的術(shù)語,比如JDK、JVM、JRE和HotSpotVM。接著會介紹JVM結(jié)構(gòu)和Java堆內(nèi)存結(jié)構(gòu)。理解這些基礎(chǔ)對于理解后面的垃圾回收知識很重要。
Java關(guān)鍵術(shù)語
JavaAPI:一系列幫助開發(fā)者創(chuàng)建Java應(yīng)用程序的封裝好的庫。
Java開發(fā)工具包(JDK):一系列工具幫助開發(fā)者創(chuàng)建Java應(yīng)用程序。JDK包含工具編譯、運行、打包、分發(fā)和監(jiān)視Java應(yīng)用程序。
Java虛擬機(jī)(JVM):JVM是一個抽象的計算機(jī)結(jié)構(gòu)。Java程序根據(jù)JVM的特性編寫。JVM針對特定于操作系統(tǒng)并且可以將Java指令翻譯成底層系統(tǒng)的指令并執(zhí)行。JVM確保了Java的平臺無關(guān)性。
Java運行環(huán)境(JRE):JRE包含JVM實現(xiàn)和JavaAPI。
JavaHotSpot虛擬機(jī)
每種JVM實現(xiàn)可能采用不同的方法實現(xiàn)垃圾回收機(jī)制。在收購SUN之前,Oracle使用的是JRockitJVM,收購之后使用HotSpotJVM。目前Oracle擁有兩種JVM實現(xiàn)并且一段時間后兩個JVM實現(xiàn)會合二為一。
HotSpotJVM是目前OracleSE平臺標(biāo)準(zhǔn)核心組件的一部分。在這篇垃圾回收教程中,我們將會了解基于HotSpot虛擬機(jī)的垃圾回收原則。
JVM體系結(jié)構(gòu)
下面圖片總結(jié)了JVM的關(guān)鍵組件。在JVM體系結(jié)構(gòu)中,與垃圾回收相關(guān)的兩個主要組件是堆內(nèi)存和垃圾回收器。堆內(nèi)存是內(nèi)存數(shù)據(jù)區(qū),用來保存運行時的對象實例。垃圾回收器也會在這里操作?,F(xiàn)在我們知道這些組件是如何在框架中工作的。

Java堆內(nèi)存
我們有必要了解堆內(nèi)存在JVM內(nèi)存模型的角色。在運行時,Java的實例被存放在堆內(nèi)存區(qū)域。當(dāng)一個對象不再被引用時,滿足條件就會從堆內(nèi)存移除。在垃圾回收進(jìn)程中,這些對象將會從堆內(nèi)存移除并且內(nèi)存空間被回收。堆內(nèi)存以下三個主要區(qū)域:
新生代(YoungGeneration)
Eden空間(Edenspace,任何實例都通過Eden空間進(jìn)入運行時內(nèi)存區(qū)域)
S0Survivor空間(S0Survivorspace,存在時間長的實例將會從Eden空間移動到S0Survivor空間)
S1Survivor空間(存在時間更長的實例將會從S0Survivor空間移動到S1Survivor空間)
老年代(OldGeneration)實例將從S1提升到Tenured(終身代)
永久代(PermanentGeneration)包含類、方法等細(xì)節(jié)的元信息

永久代空間在Java8特性中已經(jīng)被移除。
總結(jié)
以上就是本文關(guān)于簡單介紹Java垃圾回收機(jī)制的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
java正則匹配讀取txt文件提取特定開頭和結(jié)尾的字符串
通常我們可以直接通過文件流來讀取txt文件的內(nèi)容,但有時候也會遇到問題,下面這篇文章主要給大家介紹了關(guān)于java正則匹配讀取txt文件提取特定開頭和結(jié)尾的字符串的相關(guān)資料,需要的朋友可以參考下2022-11-11
java并發(fā)包工具CountDownLatch源碼分析
這篇文章主要為大家介紹了java并發(fā)包工具CountDownLatch源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
基于SpringBoot實現(xiàn)驗證碼功能的代碼及思路
SpringBoot技術(shù)是目前市面上從事JavaEE企業(yè)級開發(fā)過程中使用量最大的技術(shù),下面這篇文章主要給大家介紹了如何基于SpringBoot實現(xiàn)驗證碼功能的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
通過Java實現(xiàn)中文分詞與文本關(guān)鍵詞提取
這篇文章主要為大家詳細(xì)介紹了如何利用Java實現(xiàn)中文分詞以及文本關(guān)鍵詞提取功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)2023-06-06
詳解Springboot @Cacheable 注解(指定緩存位置)
這篇文章主要介紹了詳解Springboot @Cacheable 注解(指定緩存位置),使用? @Cacheable ?注解就可以將運行結(jié)果緩存,以后查詢相同的數(shù)據(jù),直接從緩存中取,不需要調(diào)用方法,需要的朋友可以參考下2023-09-09
升級dubbo2.7.4.1版本平滑遷移到注冊中心nacos
這篇文章主要為大家介紹了2.7.4.1的dubbo平滑遷移到注冊中心nacos的兩種版本升級方案,以及為什要升級,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02
Java?超詳細(xì)講解數(shù)據(jù)結(jié)構(gòu)中的堆的應(yīng)用
堆首先是一個完全二叉樹,堆分為小根堆和大根堆。小根堆,所有結(jié)點的左右子節(jié)點都不小于根節(jié)點;大根堆,所有結(jié)點的左右子節(jié)點都不大于根節(jié)點。優(yōu)先級隊列(priorityQueue)底層就是一個小根堆2022-04-04
java Volatile與Synchronized的區(qū)別
這篇文章主要介紹了java Volatile與Synchronized的區(qū)別,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-12-12

