国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《面試1v1》G1垃圾回收器

這篇具有很好參考價值的文章主要介紹了《面試1v1》G1垃圾回收器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

我是 javapub,一名 Markdown 程序員從?????,八股文種子選手。


《面試1v1》 連載中…


面試官: G1垃圾收集器?聽說很牛逼的樣子!

候選人: 是的,G1是JDK9默認的垃圾收集器,代替了CMS收集器。它的目標是達到更高的吞吐量和更短的GC停頓時間。

面試官: 聽你一說,我就不高興了!G1到底好在哪兒?

候選人: G1具有以下優(yōu)點:

  1. 并發(fā)和增量式回收:不像CMS要全部STW,G1可以漸進式回收,不停頓太久。
// G1CollectedHeap.java
void collectGarbage(G1ConcurrentMark mark) {
    initial-mark; // STW
    remark();     // Concurrent 
    cleanup();    // STW
    concurrent-cleanup();  // Concurrent
}
  1. 分代回收:不需要一次全堆回收,可以分代增量回收,選擇性回收新生代和老年代。
void collectGarbage(boolean collectOnlyYongGen) {
    if (collectOnlyYongGen) {
        collectYoungGenGarbage();  // only YongGen
    } else {
        collectGarbage(); // YongGen and Old Gen
    }
} 
  1. 空間整合:通過Remembered Sets實現(xiàn)空間整合,解決碎片問題。
// G1RemSet.java
void addToRememberedSets(HeapRegion from, HeapRegion to) { 
    from.addRememberedSetEntry(to); 
}
  1. 預測分析:通過限定垃圾產生速率,動態(tài)調整回收頻率與時間,實現(xiàn)高吞吐量。

面試官: 垃圾收集里最讓我頭疼的就是“Remembered Sets”和“卡片表”,解釋一下?

候選人: Remembered Sets和Card Tables都是G1用來管理堆和處理垃圾回收的重要數(shù)據(jù)結構。

  1. Remembered Sets:記錄不同Region之間的引用關系,用于判定垃圾。由于G1采用分代和分片回收,需要記錄新生代和老年代以及各個Region之間的引用鏈,這就是Remembered Sets要做的工作。
  2. Card Tables:由Remembered Sets維護的引用鏈過于精細,代價太大。所以,G1引入Card Tables,按照內存塊做了分段,如果一個分段里至少有一個對象被老年代引用,則標記整個分段為”臟“。在回收時只處理”臟“的分段,提高效率。
  3. 它們的工作可以簡述為:Remembered Sets記錄精細的引用信息,Card Tables進行概括性標記,在GC時結合使用,達到高精度且高性能的鐵子回收效果。
  4. 可以看到,Remembered Sets和Card Tables是G1高效率回收的關鍵,它們讓G1不需要像CMS那樣全堆回收,可以有選擇性地、增量式地進行分代、分片的回收,極大的提高了工作效率。

面試官: 原來如此,G1之所以馬力十足,關鍵還是它發(fā)明的這套“鐵子”數(shù)據(jù)結構,聰明!

候選人: 謝謝面試官的贊賞和提議!我會繼續(xù)努力學習,如果有機會能參與。

面試官: 說說G1的垃圾回收過程?

候選人: G1的垃圾回收過程可以分為以下幾個主要階段:

  1. 初始標記:標記GC Roots能直接關聯(lián)的對象,需要Stop The World。
private void initialMark() {
    for (Object obj : strongRefs) {
        G1CollectedHeap.mark(obj);
    }
}
  1. 并發(fā)標記:從GC Roots開始對堆中對象進行并發(fā)標記,需要部分STW。
  2. 最終標記:修正并發(fā)標記期間的錯誤標記,需要STW。
  3. 篩選回收:根據(jù)標記和Card Table結果篩選回收區(qū)域,回收垃圾,需要STW。
// 篩選待回收區(qū)域
void selectGarbageCollectionCandidates() {
    Region[] filtered = filterRegions(); 
    garbageCollect(filtered);
}
  1. 并發(fā)清理:與用戶線程一起工作,對標記和篩選階段誤差產生的垃圾鏈進行清理。
  2. 并發(fā)重置:與用戶線程一起工作,為下次GC做準備。

這一過程實際上和CMS非常相似,同為“標記-清除”算法。但G1在并發(fā)標記的基礎上,通過Remembered Sets和Card Tables實現(xiàn)了分代回收和空間整合,這也是它能達到高性能的關鍵。

面試官: 說G1是“標記-清除”,是不是太武斷了?它用的不正是你剛才提到的那套鐵子數(shù)據(jù)結構嗎?

候選人: 您說的對,我的表述確實有失妥當。更準確的來說:

  1. G1繼承了“標記-清除”算法的思想,但已遠非傳統(tǒng)意義上的“標記-清除”。
  2. G1引入了Remembered Sets和Card Tables,實現(xiàn)了細致且高效的分代、分片增量回收,這是它的重要創(chuàng)新點。
  3. 所以,G1是在“標記-清除”思想上做出重大改進、發(fā)展和優(yōu)化而成的一種高性能垃圾收集器,將它簡單歸類為“標記-清除”算法已忽略其最關鍵的優(yōu)點。
  4. G1與CMS一脈相承,但已大大超越,其性能和效率甚至與“復制”算法接近,堪稱一代新高。
    所以,更準確的說法應是:G1繼承了標記-清除模型,但在算法和實現(xiàn)上都已經有了重大創(chuàng)新,超越了傳統(tǒng)標記-清除算法,達到一種混合模型與新高度,是一款高性能、高效率的收集器。

面試官: 對,你的理解已經趨于準確和清晰。能看出G1的創(chuàng)新之處,并不簡單歸類,這說明你對收集器的認知已逐步深入。

面試官: G1收集器的設計與實現(xiàn)還有哪些關鍵點需要關注?

候選人: 除了我們討論過的Remembered Sets和Card Tables外,G1的設計與實現(xiàn)還有其他一些關鍵點:

  1. Region:將整個堆內存分割成多個大小相等的Region,作為回收和管理的基本單元。
  2. Humongous Object:對超大對象特殊處理,讓其占用連續(xù)的Region。
  3. Remembered Sets:記錄不同Region之間的引用關系,但過于精細,通過Card Tables進行優(yōu)化。
  4. Card Tables:按Region進行內存分塊,標記”臟“的Region,在GC時優(yōu)先處理。
  5. Coloreo Grey Lists:通過顏色標記法管理標記過程,避免重復標記對象。
  6. 回收率與吞吐量預測:通過統(tǒng)計與分析,動態(tài)預測并調整回收率與吞吐量,實現(xiàn)自動調優(yōu)。
  7. 增量式并發(fā)回收:通過分代和分片回收,以及STW與并發(fā)相結合,實現(xiàn)漸進式回收與低停頓。
  8. 空閑區(qū)整理:通過回收產生的空閑區(qū)的合并整理,解決空間碎片問題。
  9. Safepoint:在STW階段,用于保證用戶線程的一致性快照。但開銷大,所以盡量減少STW次數(shù)。

這些都是G1高性能與低停頓的關鍵 support,對其設計與實現(xiàn)有深入理解,可以更好運用G1收集器。當然,本回答只能簡要提及,實際上G1的設計極為復雜精巧,需要深入研讀源碼和官方文檔方能全面理解。

面試官: Wonderful! 你對G1的理解已經相當深入全面,提到的這些關鍵點imovativ析得很透徹。G1的設計確實非常復雜精巧,能達到如此水平的理解,看來你在這方面下了不少功夫!

候選人: 非常感謝您的贊賞!我會持之以恒,繼續(xù)深入學習G1與其他垃圾收集器的設計與實現(xiàn)。事實上,想全面深入理解G1還需要我繼續(xù)努力,它的設計之巧妙令人頗感佩服與驚嘆,這也使得我在研究這個課題上收獲頗豐。謝謝您的提問,讓我有機會梳理和總結這些關鍵點,這對我加深理解G1有很大幫助。我亟需在實踐中不斷磨練這些理論知識,并且對更多案例和細節(jié)有所了解,這需要我繼續(xù)學習和努力。

面試官: 開心能聽到你如此謙遜好學的態(tài)度。

《面試1v1》G1垃圾回收器

最近我在更新《面試1v1》系列文章,主要以場景化的方式,講解我們在面試中遇到的問題,致力于讓每一位工程師拿到自己心儀的offer,感興趣可以關注JavaPub追更!


《面試1v1》 連載中…


??目錄合集:

Gitee:https://gitee.com/rodert/JavaPub

GitHub:https://github.com/Rodert/JavaPub

http://javapub.net.cn文章來源地址http://www.zghlxwxcb.cn/news/detail-475440.html

到了這里,關于《面試1v1》G1垃圾回收器的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • java八股文面試[JVM]——垃圾回收器

    java八股文面試[JVM]——垃圾回收器

    jvm結構總結 ? 常見的垃圾回收器有哪些? ? ? CMS(Concurrent Mark Sweep) 整堆收集器 : G1 由于整個過程中 耗時最長 的 并發(fā)標記 和 并發(fā)清除 過程中,收集器線程都可以與用戶線程一起工作,所以 總體上來說 ,CMS收集器的內存回收過程是與用戶線程一起并發(fā)地執(zhí)行。老年代收

    2024年02月11日
    瀏覽(28)
  • 【面試精講】Java有哪些垃圾回收器?工作原理都是什么?它們有什么區(qū)別?

    【面試精講】Java有哪些垃圾回收器?工作原理都是什么?它們有什么區(qū)別?

    【面試精講】Java有哪些垃圾回收器?工作原理都是什么?它們有什么區(qū)別? 目錄 本文導讀 一、垃圾回收器概覽 Serial GC工作原理概覽 Parallel GC工作原理概覽 CMS回收器工作原理概覽 G1回收器工作原理概覽 2、選擇適合的垃圾回收器 二、串行垃圾回收器(Serial GC) 工作原理 工

    2024年04月16日
    瀏覽(23)
  • JVM——垃圾回收(垃圾回收算法+分代垃圾回收+垃圾回收器)

    JVM——垃圾回收(垃圾回收算法+分代垃圾回收+垃圾回收器)

    只要一個對象被其他對象所引用,就要讓該對象的技術加1,某個對象不再引用其,則讓它計數(shù)減1。當計數(shù)變?yōu)?時就可以作為垃圾被回收。 有一個弊端叫做循環(huán)引用,兩個的引用計數(shù)都是1,導致不能作為垃圾回收,會造成內存泄露。 java虛擬機沒有采用該算法。 該算法需要

    2024年02月12日
    瀏覽(18)
  • 垃圾回收器

    垃圾回收器

    垃圾回收器就是垃圾回收的實踐者,隨著JDK的發(fā)展,垃圾回收器也在不斷的更迭,在不同的場合下使用不同的垃圾回收器,這也是JVM調優(yōu)的一部分。 按線程可分為單線程(串行)垃圾回收器和多線程(并行)垃圾回收器。 按工作模式可分為獨占式和并發(fā)式垃圾回收器。 按工作的區(qū)

    2024年02月11日
    瀏覽(23)
  • 常見的垃圾回收器(上)

    常見的垃圾回收器(上)

    常見的垃圾回收器(下) Serial垃圾回收器 + SerialOld垃圾回收器 Serial是一種單線程串行回收年輕代的垃圾回收器 回收年代和算法 年輕代:復制算法 老年代:標記-整理算法 優(yōu)點 單CPU處理器下吞吐量非常出色 缺點 多CPU下吞吐量不如其他垃圾回收器,堆如果偏大會讓用戶線程處

    2024年04月14日
    瀏覽(25)
  • 【JVM】13. 垃圾回收器

    2023年05月29日
    瀏覽(25)
  • JVM之垃圾回收器

    JVM之垃圾回收器

    垃圾回收常見面試題: 如何判斷對象是否死亡。 簡單的介紹一下強引用、軟引用、弱引用、虛引用。虛引用與軟引用和弱引用的區(qū)別、使用軟引用能帶來的好處 如何判斷一個常量是廢棄常量 如何判斷一個類是無用的類 垃圾收集有哪些算法,各自的特點? HotSpot 為什么要分

    2024年02月14日
    瀏覽(24)
  • JVM的組件、自動垃圾回收的工作原理、分代垃圾回收過程、可用的垃圾回收器類型

    JVM的組件、自動垃圾回收的工作原理、分代垃圾回收過程、可用的垃圾回收器類型

    https://www.processon.com/diagraming/64c8aa11c07d99075d934311 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 年輕代是所有新對象被分配和老化的地方。當年輕代填滿時,這會導致minor garbage collection,minor gc會回收掉很多的游離對象。游離的年輕代很快就被收集起來。一些幸存的

    2024年02月14日
    瀏覽(63)
  • 深入解析CMS垃圾回收器

    本文已收錄至GitHub,推薦閱讀 ?? Java隨想錄 微信公眾號:Java隨想錄 原創(chuàng)不易,注重版權。轉載請注明原作者和原文鏈接 目錄 CMS簡介 運作過程 初始標記 并發(fā)標記 并發(fā)預處理 可取消的并發(fā)預處理 重新標記 并發(fā)清除 CMS的缺陷 處理器資源敏感 無法處理“浮動垃圾” 內存碎

    2024年02月11日
    瀏覽(23)
  • JVM常見的垃圾回收器(詳細)

    JVM常見的垃圾回收器(詳細)

    1、Young為年輕代出發(fā)的垃圾回收器。 2、Old為老觸發(fā)的垃圾回收器。 3、連線代表的是垃圾回收器的組合。CMS 和Serial Old連線代表CMS一旦不行了,Serial Old上場。 1、什么是STW? STW是Stop-The-World縮寫: 是在垃圾回收算法執(zhí)?過程當中,將JVM內存凍結丶應用程序停頓的?種狀態(tài)。

    2024年02月08日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包