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

溫馨提示×

溫馨提示×

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

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

java的jvm垃圾收集算法介紹

發布時間:2020-06-04 09:50:18 來源:億速云 閱讀:248 作者:Leah 欄目:編程語言

java的jvm垃圾收集算法有哪些算法?一般大家對jvm垃圾收集算法了解可能停留在概念的層面上,而對于jvm具體有哪些算法了解相對較少。今天就跟大家聊聊jvm垃圾收集算法的主要算法。

  1. 標記清除算法:算法分為標記和清除兩個階段,首先標記出所有需要回收的對象,在標記完成后統一回收所有被標記的對象
    java的jvm垃圾收集算法介紹

從圖中可以看出這種算法的缺點在于,垃圾被回收以后造成了大量不連續的內存碎片。碎片太多可能會導致以后需要分配較大對象時,無法找到連續的足夠內存從而頻繁觸發垃圾收集,降低系統效率。

  1. 復制算法:為了解決“標記,清除”算法的問題一種被稱為復制的算法出現了,它將內存平均分為兩塊,每次只使用其中一塊,當這一塊存滿時觸發垃圾收集,將還存活的對象復制到另一塊內存,然后將這塊內存清掉,這樣就不會存在內存碎片的問題。

    java的jvm垃圾收集算法介紹

  2. 標記整理算法:
    復制算法在存活對象較多的時候需要復制的操作也較多,最關鍵的是只能利用一半的內存,標記整理算法可以解決這個問題,標記整理算法中的標記和標記清除算法一樣,要被回收的對象找出來以后讓所有存活的對象向一端移動,然后將內存的剩余部分直接清理掉。
    java的jvm垃圾收集算法介紹

  3. 分代收集算法:
    分代收集算法將內存分為新生代和老年代,新生代又分為:較大的Eden區(占80%)和兩塊Survivor區(各占10%),剛剛創建的對象存放在新生代的Eden區
    ,因為絕大多數的對象(98%)都是朝生夕死的,當Eden區沒有足夠的空間的時候虛擬機會發起一次Minor Gc,Minor Gc之后,存活對象會進入其中的一塊Suvivor區,Eden區被清空,如果Suvivor區內存不夠則直接進入老年代。下一次Minor Gc會將Eden和該Suvivor區的存活對象復制到另一塊Suvivor區,并將Eden區和該Suvivor區清空。
    在這里我們可以看到相比復制算法,被浪費的空間只有10%。但是前提是絕大部分(90%)的對象在Mino Gc的時候會被回收,如果不滿足這個條件Suvivor區大小不夠,則存活的對象直接進入老年代。
    為什么需要Survivor區?
    試想一下如果沒有Survior區,每次進行Minor Gc,存活的對象直接進入老年代,老年代內存被占滿會發生Major Gc,Major Gc執行的速度比Minor Gc慢十倍以上,當有了Survivor區,存活的對象在兩塊Survior區中倒騰,當倒騰的次數達到16次說明這個對象生命力真的很頑強,才會被放入老年代。這樣就減少了Major Gc發生的頻次。

為什么需要兩塊Survivor區?
為了避免內存碎片化的問題,大家想想復制算法是如何解決標記清除算法的內存碎片化問題的,將內存分為大小相等的兩塊,將存活的對象復制到另一塊內存,這里也是一樣的道理。

老年代:
因為老年代中對象的生命力比較頑強,如果采用復制算法那些存活的對象需要被復制很多次,所以老年代采用的是標記整理算法。

什么樣的對象會進入老年代呢?

  1. 大對象會直接進入老年代:
    所謂的大對象就是指需要大量連續內存空間的對象,典型的大對象就是很長的字符串和數組,如果大對象直接在Eden區分配內存空間會導致Eden和Survior之間的大量內存復制,很消耗性能,所以它會直接進入老年代。
  2. 長期存活的對象會進入老年代
    所謂長期存活的對象就是前面所述,來回倒騰十六次還不死的對象。
看完上述內容,你們對jvm垃圾收集算法有進一步的了解嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀。

向AI問一下細節

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

AI

蕲春县| 承德县| 兴文县| 广平县| 连云港市| 柳江县| 巴东县| 恩施市| 公主岭市| 静海县| 栾川县| 康保县| 萨迦县| 青岛市| 乌恰县| 浮梁县| 昂仁县| 万荣县| 靖安县| 岚皋县| 栖霞市| 博罗县| 台安县| 吉安市| 富宁县| 西吉县| 策勒县| 湘西| 南宫市| 古蔺县| 都江堰市| 色达县| 上林县| 上饶市| 恩平市| 鲁山县| 临潭县| 平南县| 汝阳县| 韩城市| 循化|