日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GC之G1垃圾收集器

發布時間:2024/2/28 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GC之G1垃圾收集器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GC之G1垃圾收集器


目錄

  • 以前收集器的特點
  • G1是什么
  • G1特點
  • G1底層原理
  • G1回收步驟
  • 和CMS相比的優勢
  • 小總結

  • 1. 以前收集器的特點

  • 年輕代和老年代是各自獨立且連續的內存塊
  • 年輕代收集必須使用單個eden+S0+S1進行復制算法
  • 老年代收集掃描整個老年代區域
  • 都是以盡可能少而快速地執行GC為設計原則
  • 2. G1是什么

  • G1(Garbage-Frist)收集器,是一款面向服務端應用的收集器

  • 從官網的描述中,我們知道G1是一種服務器端的垃圾收集器,應用在多處理器和大容量內存環境中,在提高吞吐量的同時,盡可能的滿足垃圾收集暫停時間的要求。另外,它還具有以下特性:

  • 像CMS收集器一樣,能與應用程序線程并發執行
  • 整理空閑空間更快
  • 需要更多的時間來預測GC停頓時間
  • 不希望犧牲大量的吞吐性能
  • 不需要更大的Java Heap
  • G1收集器的設計目標是取代CMS收集器,它同CMS相比,在以下方面表現更出色:

  • G1是一個有整理內存過程的垃圾收集器,不會產生很多內存碎片
  • G1的Stop-The-World(STW)更可控,G1在停頓時間上添加了預測機制,用戶可以指定期望停頓時間。
  • CMS垃圾集器雖然減少了暫停應用程序的運行時間,但是它還是存在著內存碎片問題。于是,為了去除內存碎片問題,同時又保留CMS垃圾收集器低暫停時間的優點,JAVA7發布了一個新的垃圾收集器-G1垃圾收集器。

  • G1是在2012年才在jdk1.7u4中可用。oracle官方計劃在jdk9中將GI變成默認的垃圾收集器以替代CMS。它是一款面向服務端應用的收集器,主要應用在多CPU和大內存服務器環境下,極大的減少垃圾收集的停頓時間,全面提升服務器的性能,逐步替換java8以前的CMS收集器。

  • 主要改變是Eden,Survivor和Tenured等內存區域不再是連續的了,而是變成了一個個大小一樣的region,每個region從1M到32M不等。一個region有可能屬于Eden,Survivor或者Tenured內存區域。

  • 3. G1特點

  • G1能充分利用多CPU、多核環境硬件優勢,盡量縮短STW
  • GI整體上采用標記-整理算法,局部是通過復制算法,不會產生內存碎片。
  • 宏觀上看G1之中不再區分年輕代和老年代。把內存劃分成多個獨立的了區域(Region),可以近似理解為一個圍棋的棋盤。
  • G1收集器里面講整個的內存區都混合在一起了,但其本身依然在小范圍內要進行年輕代和老年代的區分,保留了新生代和老年代,但它們不再是物理隔離的,而是一部分Region的集合且不需要Region是連續的,也就是說依然會采用不同的GC方式來處理不同的區域。
  • GI雖然也是分代收集器,但整個內存分區不存在物理上的年輕代與老年代的區別,也不需要完全獨立的survivor(tospace)堆做復制
    準備。GI只有邏輯上的分代概念,或者說每個分區都可能隨GI的運行在不同代之間前后切換;

  • 4. G1底層原理

  • Region區域化垃圾收集器

  • 區域化內存劃片Region,整體編為了一系列不連續的內存區域,避免了全內存區的GC操作。
  • 核心思想是將整個堆內存區域分成大小相同的子區域(Region),在JVM啟動時會自動設置這些子區域的大小,在堆的使用上,G1并不要求對象的存儲一定是物理上連續的只要邏輯上連續即可,每個分區也不會固定地為某個代服務,可以按需在年輕代和老年代之間切換。啟動時可以通過參數-XX:G1HeapRegionSize=n可指定分區大小(1MB~32MB,且必須是2的冪),默認將整堆劃分為2048個分區。
  • 大小范圍在IMB、32MB,最多能設置2048個區域,也即能夠支持的最大內存為:32MB2048=65536MB=64G內存
  • G1算法將堆劃分為若干個區域(Region),它仍然屬于分代收集器

  • 這些Region的一部分包含新生代,新生代的垃圾收集依然采用暫停所有應用線程的方式,將存活對象拷貝到老年代或者survivor空間。

  • 這些Region的一部分包含老年代,G1收集器通過將對象從一個區域復制到另外一個區域,完成了清理工作。這就意味著,在正常的處理過程中,G1完成了堆的壓縮(至少是部分堆的壓縮),這樣也就不會有
    CMS內存碎片問題的存在了。

  • 在G1中,還有一種特殊的區域,叫Humongous(巨大的)區域

  • 如果一個對象占用的空間超過了分區容量50%以上,G1收集器就認為這是一個巨型對象。這些巨型對象默認直接會被分配在年老代,但是如果它是一個短期存在的巨型對象,就會對垃圾收集器造成負面影響。為了解決這個問題,G1劃分了一個Humongous區,它用來專門存放巨型對象。如果一個H區裝不下一個巨型對象,那么GI會尋找連續的H分區來
    存儲。為了能找到連續的H區,有時候不得不啟動Full GC


  • 5. G1回收步驟



    6. 和CMS相比的優勢

    比起CMS有兩個優勢:

  • G1不會產生內存碎片。
  • G1可以精確控制停頓。該收集器是把整個堆(新生代、老年代)劃分成多個固定大小的區域,每次根據運行 停頓的時間去收集垃圾最多的區域。
  • 7. 小總結

    總結

    以上是生活随笔為你收集整理的GC之G1垃圾收集器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。