亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

有哪些jvm垃圾回收算法

發布時間:2021-04-22 15:14:46 來源:億速云 閱讀:183 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關有哪些jvm垃圾回收算法,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

jvm垃圾回收算法:1、“標記–清除”算法;首先標記出所有需要被回收的對象,然后在標記完成后統一回收掉所有被標記的對象。2、復制算法;將內存劃分為等大的兩塊,每次只使用其中的一塊。3、“標記–整理”算法;4、分代收集算法。

JVM垃圾回收算法


兩個概念:

新生代:存放生命周期較短的對象的區域。
老年代:存放生命周期較長的對象的區域。

相同點: 都在Java堆上

1.標記–清除算法

執行步驟:

  • 標記:遍歷內存區域,對需要回收的對象打上標記。

  • 清除:再次遍歷內存,對已經標記過的內存進行回收。

圖解:

有哪些jvm垃圾回收算法
有哪些jvm垃圾回收算法

缺點:

  • 效率問題;遍歷了兩次內存空間(第一次標記,第二次清除)。

  • 空間問題:容易產生大量內存碎片,當再需要一塊比較大的內存時,無法找到一塊滿足要求的,因而不得不再次出發GC。

2.復制算法

將內存劃分為等大的兩塊,每次只使用其中的一塊。當一塊用完了,觸發GC時,將該塊中存活的對象復制到另一塊區域,然后一次性清理掉這塊沒有用的內存。下次觸發GC時將那塊中存活的的又復制到這塊,然后抹掉那塊,循環往復。

圖解:

有哪些jvm垃圾回收算法

有哪些jvm垃圾回收算法

優點

  • 相對于標記–清理算法解決了內存的碎片化問題。

  • 效率更高(清理內存時,記住首尾地址,一次性抹掉)。

缺點:

  • 內存利用率不高,每次只能使用一半內存。

改進

研究表明,新生代中的對象大都是“朝生夕死”的,即生命周期非常短而且對象活得越久則越難被回收。在發生GC時,需要回收的對象特別多,存活的特別少,因此需要搬移到另一塊內存的對象非常少,所以不需要1:1劃分內存空間。而是將整個新生代按照8 : 1 : 1的比例劃分為三塊,最大的稱為Eden(伊甸園)區,較小的兩塊分別稱為To Survivor和From Survivor。

首次GC時,只需要將Eden存活的對象復制到To。然后將Eden區整體回收。再次GC時,將Eden和To存活的復制到From,循環往復這個過程。這樣每次新生代中可用的內存就占整個新生代的90%,大大提高了內存利用率。【相關推薦:Java視頻教程】

但不能保證每次存活的對象就永遠少于新生代整體的10%,此時復制過去是存不下的,因此這里會用到另一塊內存,稱為老年代,進行分配擔保,將對象存儲到老年代。若還不夠,就會拋出OOM。

老年代:存放新生代中經過多次回收仍然存活的對象(默認15次)。

3. 標記–整理算法

因為前面的復制算法當對象的存活率比較高時,這樣一直復制過來,復制過去,沒啥意義,且浪費時間。所以針對老年代提出了“標記整理”算法。

執行步驟:

  • 標記:對需要回收的進行標記

  • 整理:讓存活的對象,向內存的一端移動,然后直接清理掉沒有用的內存。

圖解:

有哪些jvm垃圾回收算法
有哪些jvm垃圾回收算法

4. 分代收集算法

當前大多商用虛擬機都采用這種分代收集算法,這個算法并沒有新的內容,只是根據對象的存活的時間的長短,將內存分為了新生代和老年代,這樣就可以針對不同的區域,采取對應的算法。如:

  • 新生代,每次都有大量對象死亡,有老年代作為內存擔保,采取復制算法。

  • 老年代,對象存活時間長,采用標記整理,或者標記清理算法都可。

MinorGC和FullGC的區別

MinorGC:發生在新生代的垃圾回收,因為新生代的特點,MinorGC非常頻繁,且回收速度比較快,每次回收的量也很大。
FullGC:發生在老年代的垃圾回收,也稱MajorGC,速度比較慢,相對于MinorGc慢10倍左右。進行一次FullGC通常會伴有多次多次MinorGC,。

關于有哪些jvm垃圾回收算法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

jvm
AI

龙海市| 肇源县| 呼图壁县| 陇川县| 洛浦县| 绿春县| 平塘县| 西昌市| 海南省| 宾阳县| 宝山区| 洪江市| 长汀县| 津南区| 万载县| 平乡县| 丰顺县| 将乐县| 梅河口市| 泽普县| 绥化市| 庆云县| 上思县| 循化| 永胜县| 开平市| 岗巴县| 峨眉山市| 泊头市| 盱眙县| 东港市| 太原市| 柳河县| 赤城县| 罗甸县| 南平市| 崇文区| 宁明县| 偏关县| 新田县| 沽源县|