您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“怎么觸發(fā)YoungGC或FullGC操作”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么觸發(fā)YoungGC或FullGC操作”吧!
JAVA的垃圾回收需要完成三件事情:
1、哪些內(nèi)存需要回收
2、什么時候回收
3、如何回收
下面就從這三個問題出發(fā)去了解Java的垃圾回收機制。
在垃圾回收之前,首要的問題是確定哪些垃圾需要被回收,現(xiàn)在Java通過根搜索算法(GC Roots Tracing)來判斷一個對象是否存活,這個算法的思路就是通過一系列名為“GC Roots”的對象作為起始點,從這些節(jié)點向下搜索,當GC Roots到達不了這個某個對象時(或者說某個對象沒有被任何其他對象所引用),就證明這個對象是不可用的,這些對象會被判定為需要回收的對象。
如圖,ObjC是不可達的,這個對象就是需要被回收的對象。
在Java語言中,可作為GC Roots的對象包括下面這些:
1、虛擬機棧(棧幀中的本地變量表)中引用的對象
2、方法區(qū)中的類靜態(tài)屬性引用的對象
3、方法區(qū)中的常量引用的對象
4、本地方法棧(Native方法)引用的對象
關(guān)于如何回收的問題,我參考了《深入理解Java虛擬機》,根搜索算法中不可達的對象,并不是立刻就會被回收,而是會經(jīng)過一次標記:
如果對象沒有覆蓋finalize()方法,或者finalize()方法已經(jīng)被調(diào)用,虛擬機會判定這個對象沒必要執(zhí)行finalize(),在這一次標記中該對象不會被回收。
如果這個對象被標記為有必要執(zhí)行finalize()方法時,它會被放置在一個名為F-Queue的隊列中,稍后由虛擬機進行垃圾回收。
但是這個對象還有最后一次逃脫的機會,當在F-Queue時,虛擬機會對F-Queue中的對象作小規(guī)模的標記,如果發(fā)現(xiàn)此時某個對象又可達了,就會逃過GC的命運。
如何回收垃圾的問題歸根結(jié)底就是垃圾回收算法如何回收垃圾的問題。這里主要介紹三種垃圾回收算法的執(zhí)行思路:
這種算法分為標記和清除兩個階段,首先標記出所有需要回收的對象,在標記完成后統(tǒng)一回收掉被標記的對象。
看圖就可以明白了,這個算法的問題在于,清除之后會產(chǎn)生大量不連續(xù)的空間碎片。
復制算法將內(nèi)存分為兩塊,每次使用其中一塊,垃圾回收時,將正在使用的那塊內(nèi)存中存活的內(nèi)存放入另一塊內(nèi)存中,然后清空原內(nèi)存塊,圖示圖下: 復制算法被廣泛應用于新生代的垃圾回收,由于新生代的對象有百分之98左右都是要被回收的,因此新生代的內(nèi)存會被分為一塊Eden空間和兩塊Survivor空間,比例為8:1:1。
第一次YGC只回收eden區(qū)域,回收后大多數(shù)(百分之九十八左右)的對象會被回收,活著的對象通過復制算法進入Survivor0(后續(xù)用S0和S1代替)。再次YGC后,eden+S0中活著的對象進入S1。再次YGC,eden+S1中活著的對象進入到S0。依次循環(huán)
標記-整理算法分為標記、整理、清除三步,第一步也是標記出可回收的對象,然后讓存活的對象移到一邊,然后直接清理掉邊界外的垃圾。
標記整理算法被廣泛應用于老年代的垃圾回收。
YoungGC的觸發(fā)時常在發(fā)生,當新生代的Eden區(qū)滿了之后就會觸發(fā)YoungGC。
FullGC在多個情況下都會被觸發(fā):
1、發(fā)生Young GC之前進行檢查,如果“老年代可用的連續(xù)內(nèi)存空間” < “新生代歷次Young GC后升入老年代的對象總和的平均大小”,說明本次Young GC后可能升入老年代的對象大小,可能超過了老年代當前可用內(nèi)存空間,此時會觸發(fā)FullGC
2、當老年代沒有足夠空間存放對象時,會觸發(fā)一次FullGC
3、如果元空間區(qū)域的內(nèi)存達到了所設(shè)定的閾值-XX:MetaspaceSize=,也會觸發(fā)FullGC。
到此,相信大家對“怎么觸發(fā)YoungGC或FullGC操作”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。