溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JVM垃圾回收機(jī)制有什么用

發(fā)布時間:2021-11-03 17:51:01 來源:億速云 閱讀:166 作者:小新 欄目:編程語言

這篇文章主要介紹JVM垃圾回收機(jī)制有什么用,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

1.JVM的gc概述

gc即垃圾收集機(jī)制是指jvm用于釋放那些不再使用的對象所占用的內(nèi)存。java語言并不要求jvm有g(shù)c,也沒有規(guī)定gc如何工作。不過常用的jvm都有g(shù)c,而且大多數(shù)gc都使用類似的算法管理內(nèi)存和執(zhí)行收集操作。

在充分理解了垃圾收集算法和執(zhí)行過程后,才能有效的優(yōu)化它的性能。有些垃圾收集專用于特殊的應(yīng)用程序。比如,實(shí)時應(yīng)用程序主要是為了避免垃圾收集中斷,而大多數(shù)OLTP應(yīng)用程序則注重整體效率。理解了應(yīng)用程序的工作負(fù)荷和jvm支持的垃圾收集算法,便可以進(jìn)行優(yōu)化配置垃圾收集器。

垃圾收集的目的在于清除不再使用的對象。gc通過確定對象是否被活動對象引用來確定是否收集該對象。JVM垃圾回收機(jī)制首先要判斷該對象是否是時候可以收集。兩種常用的方法是引用計(jì)數(shù)和對象引用遍歷。

1.1.引用計(jì)數(shù)

引用計(jì)數(shù)存儲對特定對象的所有引用數(shù),也就是說,當(dāng)應(yīng)用程序創(chuàng)建引用以及引用超出范圍時,jvm必須適當(dāng)增減引用數(shù)。當(dāng)某對象的引用數(shù)為0時,便可以進(jìn)行垃圾收集。

1.2.對象引用遍歷

早期的jvm使用引用計(jì)數(shù),現(xiàn)在大多數(shù)jvm采用對象引用遍歷。對象引用遍歷從一組對象開始,沿著整個對象圖上的每條鏈接,遞歸確定可到達(dá)(reachable)的對象。如果某對象不能從這些根對象的一個(至少一個)到達(dá),則將它作為垃圾收集。在對象遍歷階段,gc必須記住哪些對象可以到達(dá),以便刪除不可到達(dá)的對象,這稱為標(biāo)記(marking)對象。

下一步,gc要刪除不可到達(dá)的對象。刪除時,有些gc只是簡單的掃描堆棧,刪除未標(biāo)記的未標(biāo)記的對象,并釋放它們的內(nèi)存以生成新的對象,這叫做清除(sweeping)。這種方法的問題在于內(nèi)存會分成好多小段,而它們不足以用于新的對象,但是組合起來卻很大。因此,許多gc可以重新組織內(nèi)存中的對象,并進(jìn)行壓縮(compact),形成可利用的空間。

為此,gc需要停止其他的活動活動。這種方法意味著所有與應(yīng)用程序相關(guān)的工作停止,只有g(shù)c運(yùn)行。結(jié)果,在響應(yīng)期間增減了許多混雜請求。另外,更復(fù)雜的gc不斷增加或同時運(yùn)行以減少或者清除應(yīng)用程序的中斷。有的gc使用單線程完成這項(xiàng)工作,有的則采用多線程以增加效率。

2.幾種JVM垃圾回收機(jī)制用法

2.1.標(biāo)記-清除收集器

這種收集器首先遍歷對象圖并標(biāo)記可到達(dá)的對象,然后掃描堆棧以尋找未標(biāo)記對象并釋放它們的內(nèi)存。這種收集器一般使用單線程工作并停止其他操作。

2.2.標(biāo)記-壓縮收集器

有時也叫標(biāo)記-清除-壓縮收集器,與標(biāo)記-清除收集器有相同的標(biāo)記階段。在第二階段,則把標(biāo)記對象復(fù)制到堆棧的新域中以便壓縮堆棧。這種收集器也停止其他操作。

2.3.復(fù)制收集器


JVM垃圾回收機(jī)制中這種收集器將堆棧分為兩個域,常稱為半空間。每次僅使用一半的空間,jvm生成的新對象則放在另一半空間中。gc運(yùn)行時,它把可到達(dá)對象復(fù)制到另一半空間,從而壓縮了堆棧。這種方法適用于短生存期的對象,持續(xù)復(fù)制長生存期的對象則導(dǎo)致效率降低。

2.4.增量收集器


增量收集器把堆棧分為多個域,每次僅從一個域收集垃圾。這會造成較小的應(yīng)用程序中斷。

2.5.分代收集器

這種收集器把堆棧分為兩個或多個域,用以存放不同壽命的對象。jvm生成的新對象一般放在其中的某個域中。過一段時間,繼續(xù)存在的對象將獲得使用期并轉(zhuǎn)入更長壽命的域中。分代收集器對不同的域使用不同的算法以優(yōu)化性能。

2.6.并發(fā)收集器

JVM垃圾回收機(jī)制中的并發(fā)收集器與應(yīng)用程序同時運(yùn)行。這些收集器在某點(diǎn)上(比如壓縮時)一般都不得不停止其他操作以完成特定的任務(wù),但是因?yàn)槠渌麘?yīng)用程序可進(jìn)行其他的后臺操作,所以中斷其他處理的實(shí)際時間大大降低。

2.7.并行收集器

并行收集器使用某種傳統(tǒng)的算法并使用多線程并行的執(zhí)行它們的工作。在多cpu機(jī)器上使用多線程技術(shù)可以顯著的提高java應(yīng)用程序的可擴(kuò)展性。

以上是“JVM垃圾回收機(jī)制有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

jvm
AI