真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

GC垃圾回收的相關(guān)知識點-創(chuàng)新互聯(lián)

今天小編分享的是GC垃圾回收的相關(guān)知識點,可能大家對GC并不陌生,或者從來沒有了解過GC。但是不用擔心,今天小編會以最簡單的描述來講解GC垃圾回收的原理。一起來看看吧。

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè)、天元網(wǎng)絡(luò)推廣、小程序制作、天元網(wǎng)絡(luò)營銷、天元企業(yè)策劃、天元品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學生創(chuàng)業(yè)者提供天元建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

GC垃圾回收的相關(guān)知識點

一、 判斷回收條件

1、 可達性分析法:

通過一系列“GC Roots”對象作為起點進行搜索,如果在“GC Roots”和一個對象之間沒有可達路徑,則稱該對象是不可達的。不可達對象不一定會成為可回收對象。進入DEAD狀態(tài)的線程還可以恢復,GC不會回收它的內(nèi)存。(把一些對象當做root對象,JVM認為root對象是不可回收的,并且root對象引用的對象也是不可回收的)

2、 以下對象會被認為是root對象:

(1) 虛擬機棧(棧幀中本地變量表)中引用的對象

(2) 方法區(qū)中靜態(tài)屬性引用的對象

(3) 方法區(qū)中常量引用的對象

(4) 本地方法棧中Native方法引用的對象

3、 對象被判定可被回收,需要經(jīng)歷兩個階段:

(1) 第一個階段是可達性分析,分析該對象是否可達

(2) 第二個階段是當對象沒有重寫finalize()方法或者finalize()方法已經(jīng)被調(diào)用過,虛擬機認為該對象不可以被救活,因此回收該對象。(finalize()方法在垃圾回收中的作用是,給該對象一次救活的機會)

4、 方法區(qū)中的垃圾回收:

(1) 常量池中一些常量、符號引用沒有被引用,則會被清理出常量池

(2) 無用的類:被判定為無用的類,會被清理出方法區(qū)。判定方法如下:

A、 該類的所有實例被回收

B、 加載該類的ClassLoader被回收

C、 該類的Class對象沒有被引用

GC垃圾回收的相關(guān)知識點

5、 finalize():

(1) GC垃圾回收要回收一個對象的時候,調(diào)用該對象的finalize()方法。然后在下一次垃圾回收的時候,才去回收這個對象的內(nèi)存。

(2) 可以在該方法里面,指定一些對象在釋放前必須執(zhí)行的操作。

二、 虛擬機頻繁full GC的解決對策

(1) 首先用命令查看觸發(fā)GC的原因是什么 jstat –gccause 進程id

(2) 如果是System.gc(),則看下代碼哪里調(diào)用了這個方法

(3) 如果是heap inspection(內(nèi)存檢查),可能是哪里執(zhí)行jmap –histo[:live]命令

(4) 如果是GC locker,可能是程序依賴的JNI庫的原因

三、經(jīng)典的垃圾回收算法

1、Mark-Sweep(標記-清除算法):

(1)思想:標記清除算法分為兩個階段,標記階段和清除階段。標記階段任務(wù)是標記出所有需要回收的對象,清除階段就是清除被標記對象的空間。

(2)優(yōu)缺點:實現(xiàn)簡單,容易產(chǎn)生內(nèi)存碎片

2、Copying(復制清除算法):

(1)思想:將可用內(nèi)存劃分為大小相等的兩塊,每次只使用其中的一塊。當進行垃圾回收的時候了,把其中存活對象全部復制到另外一塊中,然后把已使用的內(nèi)存空間一次清空掉。

(2)優(yōu)缺點:不容易產(chǎn)生內(nèi)存碎片;可用內(nèi)存空間少;存活對象多的話,效率低下。

3、Mark-Compact(標記-整理算法):

(1)思想:先標記存活對象,然后把存活對象向一邊移動,然后清理掉端邊界以外的內(nèi)存。

(2)優(yōu)缺點:不容易產(chǎn)生內(nèi)存碎片;內(nèi)存利用率高;存活對象多并且分散的時候,移動次數(shù)多,效率低下

4、分代收集算法

思想:把堆分成新生代和老年代。

(1) 因為新生代每次垃圾回收都要回收大部分對象,所以新生代采用Copying算法。新生代里面分成一份較大的Eden空間和兩份較小的Survivor空間。每次只使用Eden和其中一塊Survivor空間,然后垃圾回收的時候,把存活對象放到未使用的Survivor(劃分出from、to)空間中,清空Eden和剛才使用過的Survivor空間。

(2) 由于老年代每次只回收少量的對象,因此采用mark-compact算法。

(3) 在堆區(qū)外有一個永久代。對永久代的回收主要是無效的類和常量

5、GC使用時對程序的影響?垃圾回收會影響程序的性能,Java虛擬機必須要追蹤運行程序中的有用對象,然后釋放沒用對象,這個過程消耗處理器時間

6、幾種不同的垃圾回收類型:

(1)Minor GC:從年輕代(包括Eden、Survivor區(qū))回收內(nèi)存。

A、當JVM無法為一個新的對象分配內(nèi)存的時候,越容易觸發(fā)Minor GC。所以分配率越高,內(nèi)存越來越少,越頻繁執(zhí)行Minor GC

B、執(zhí)行Minor GC操作的時候,不會影響到永久代(Tenured)。從永久代到年輕代的引用,被當成GC Roots,從年輕代到老年代的引用在標記階段直接被忽略掉。

(2)Major GC:清理整個老年代,當eden區(qū)內(nèi)存不足時觸發(fā)。

(3)Full GC:清理整個堆空間,包括年輕代和老年代。當老年代內(nèi)存不足時觸發(fā)

關(guān)于GC垃圾回收的相關(guān)知識點就分享到這里了,當然并不止以上和大家分析的辦法,不過小編可以保證其準確性是絕對沒問題的。希望以上內(nèi)容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。


文章標題:GC垃圾回收的相關(guān)知識點-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://weahome.cn/article/degopi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部