91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

垃圾收集機制是什么意思

發布時間:2020-07-09 17:04:58 來源:億速云 閱讀:239 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關垃圾收集機制是什么意思,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

在上一篇中我們說過,自動內存管理分為兩部分:給對象分配內存和回收分配給對象的內存。這篇我們說說后者,即回收分配給對象的內存。回收內存要用到垃圾收集機制,英文名兒是GC(Garbage Collection)。

在本部分我們要解決如下幾個問題:

1、哪些內存需要回收?

2、什么時候回收?

3、如何回收?

哪些內存需要回收?

堆和方法區的內存需要回收,其余的不需要回收。
因為只有堆和方法區是線程共享的,其余的是與線程“同生共死”的,線程結束,內存自然就跟著回收了,所以不用管它們。

什么時候回收?

(1)在堆里面:

當對象“死了”的時候就要對其進行內存回收了。啥叫對象死了?就是沒有地方引用它了,它無用了。那怎么判斷它是否死了呢?

有兩種方法:

引用計數算法

給對象添加一個引用計數器,每當有一個地方引用它時,計數器的值就+1,當引用失效時,計數器的值就-1,當計數器的值為0時,代表此對象已不被引用,也就是“可以死了”。

但這有一個弊端,就是循環引用的問題。就像下圖,堆里的兩個對象即使無用了也沒辦法對其進行回收,因為它們互相引用著,計數器的值至少為1。

垃圾收集機制是什么意思

可達性分析

所有生成的對象都是一個稱為“GC Roots”的根的子樹。從GC Roots開始向下搜索,搜索所經過的路徑稱為引用鏈。當一個對象到GC Roots沒有任何引用鏈可以到達時,就稱這個對象是不可達的,也就是可以被GC回收了。這個是Java中采用較多的方式。

就像下圖中的堆中未被引用的對象,就可以對其進行回收。

垃圾收集機制是什么意思

怎么判斷一個對象是否還存在著引用?java中的引用分為4種:

強引用:Object o=new Object(),只要強引用存在,GC永遠不會回收掉被引用的對象。

軟引用:描述一些還有用但非必需的對象。當系統即將發生內存溢出了,就會對其進行回收。

弱引用:只要進行GC,就會對其進行回收。

虛引用:這是最弱的一種引用關系,無法通過虛引用來取得一個對象實例。它的作用是:能在這個對象被收集器回收時收到一個系統通知。

(2)在方法區里面:

我們知道,方法區里存儲的是已被虛擬機加載的類信息,常量,靜態變量,即時編譯器編譯后的代碼等數據。所以我們在方法區里面進行垃圾回收,回收的是一些廢棄的常量和無用的類。

怎么判斷一個常量是否被廢棄了?

看引用計數就可以,如果沒有對象引用該常量,則說明此常量被廢棄了,也就可以回收了。

怎么判斷一個類是無用的類?

有3種情況:

a、該類所有的實例都已經被回收。

b、加載該類的ClassLoader已經被回收。

c、該類對應的java.lang.Class對象沒有任何地方被引用,無法在任何地方通過反射訪問該類的方法。

如何回收

有4種算法作為理論:
? 標記-清除算法
? 復制算法
? 標記-整理算法
? 分代收集算法

有5種收集器作為實現:

垃圾收集機制是什么意思

后記

內存溢出:系統無法再分配出你需要的空間。比如在堆中無法再給新生的對象分配內存了,在棧里棧滿了無法再讓新棧幀進棧了。

內存泄漏:內存被對象占用著不還,就叫內存泄露。

上述就是小編為大家分享的垃圾收集機制是什么意思了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jvm
AI

沙洋县| 福州市| 岳西县| 澜沧| 历史| 美姑县| 琼海市| 获嘉县| 胶南市| 兰坪| 象州县| 历史| 通州市| 德钦县| 满洲里市| 邯郸市| 邹平县| 叶城县| 阿拉善右旗| 盐津县| 道真| 九江县| 吴川市| 东乌| 迁安市| 安国市| 保定市| 西贡区| 久治县| 桃江县| 林州市| 奈曼旗| 略阳县| 开江县| 镇赉县| 徐闻县| 邮箱| 三亚市| 遂昌县| 林周县| 崇明县|