中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

兴义市| 临泉县| 苍南县| 海晏县| 双辽市| 蛟河市| 玛沁县| 仁布县| 阜阳市| 香格里拉县| 丹江口市| 平山县| 沾化县| 仁布县| 永康市| 渝北区| 彭阳县| 沈阳市| 临沭县| 德保县| 鹤庆县| 高碑店市| 惠安县| 婺源县| 巴彦县| 安吉县| 农安县| 乌鲁木齐县| 利辛县| 闽清县| 中超| 深圳市| 肥西县| 德惠市| 甘洛县| 雅安市| 洞头县| 白银市| 昌宁县| 新乐市| 茌平县|