GC之G1垃圾收集器
GC之G1垃圾收集器
目錄
1. 以前收集器的特點
2. G1是什么
G1(Garbage-Frist)收集器,是一款面向服務端應用的收集器
從官網的描述中,我們知道G1是一種服務器端的垃圾收集器,應用在多處理器和大容量內存環境中,在提高吞吐量的同時,盡可能的滿足垃圾收集暫停時間的要求。另外,它還具有以下特性:
G1收集器的設計目標是取代CMS收集器,它同CMS相比,在以下方面表現更出色:
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特點
準備。GI只有邏輯上的分代概念,或者說每個分區都可能隨GI的運行在不同代之間前后切換;
4. G1底層原理
Region區域化垃圾收集器
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有兩個優勢:
7. 小總結
總結
以上是生活随笔為你收集整理的GC之G1垃圾收集器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GitHub超实用操作
- 下一篇: Hadoop之Hadoop基础知识