大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

面試題首頁 > JVM面試題

JVM垃圾回收機(jī)制面試題

001什么是GC機(jī)制?

Java GC(Garbage Collection)垃圾回收機(jī)制,是Java與C++/C的主要區(qū)別。JVM通過GC來回收堆和方法區(qū)中的內(nèi)存,這個(gè)過程是自動(dòng)執(zhí)行的。因此作為Java開發(fā)者,不需要專門去編寫內(nèi)存回收和垃圾清理代碼,也不需要處理內(nèi)存泄露和溢出的問題。雖然java不需要開發(fā)人員顯示的分配和回收內(nèi)存,這對(duì)開發(fā)人員確實(shí)降低了不少編程難度,但也可能帶來一些副作用:
1.有可能不知不覺浪費(fèi)了很多內(nèi)存;
2.JVM花費(fèi)過多時(shí)間來進(jìn)行內(nèi)存回收;
3.內(nèi)存泄露;
Java GC機(jī)制主要完成3件事:確定哪些內(nèi)存需要回收;確定什么時(shí)候需要執(zhí)行GC;如何執(zhí)行GC。

002如和判斷一個(gè)對(duì)象是否存活?

1.引用計(jì)數(shù)法
所謂引用計(jì)數(shù)法就是給每一個(gè)對(duì)象設(shè)置一個(gè)引用計(jì)數(shù)器,每當(dāng)有一個(gè)地方引用這個(gè)對(duì)象時(shí),就將計(jì)數(shù)器加一,引用失效時(shí),計(jì)數(shù)器就減一。當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)器為零時(shí),說明此對(duì)象沒有被引用,也就是“死對(duì)象”,將會(huì)被垃圾回收.
引用計(jì)數(shù)法有一個(gè)缺陷就是無法解決循環(huán)引用問題,也就是說當(dāng)對(duì)象 A 引用對(duì)象 B,對(duì)象B 又引用者對(duì)象 A,那么此時(shí) A,B 對(duì)象的引用計(jì)數(shù)器都不為零,也就造成無法完成垃圾回收,所以主流的虛擬機(jī)都沒有采用這種算法。
2.可達(dá)性算法(引用鏈法)
該算法的思想是:從一個(gè)被稱為 GC Roots的對(duì)象開始向下搜索,如果一個(gè)對(duì)象到 GCRoots 沒有任何引用鏈相連時(shí),則說明此對(duì)象不可用。
在 java 中可以作為 GC Roots 的對(duì)象有以下幾種:
(1)虛擬機(jī)棧中引用的對(duì)象方法區(qū)類靜態(tài)屬性引用的對(duì)象方法區(qū)常量池引用的對(duì)象本地方法棧 JNI 引用的對(duì)象
雖然這些算法可以判定一個(gè)對(duì)象是否能被回收,但是當(dāng)滿足上述條件時(shí),一個(gè)對(duì)象比不一定會(huì)被回收。當(dāng)一個(gè)對(duì)象不可達(dá) GC Root 時(shí),這個(gè)對(duì)象并不會(huì)立馬被回收,而是出于一個(gè)死緩的階段,若要被真正的回收需要經(jīng)歷兩次標(biāo)記
(2)如果對(duì)象在可達(dá)性分析中沒有與 GC Root 的引用鏈,那么此時(shí)就會(huì)被第一次標(biāo)記并且進(jìn)行一次篩選,篩選的條件是是否有必要執(zhí)行 finalize()方法。當(dāng)對(duì)象沒有覆蓋 finalize()方法或者已被虛擬機(jī)調(diào)用過,那么就認(rèn)為是沒必要的。
(3)如果該對(duì)象有必要執(zhí)行 finalize()方法,那么這個(gè)對(duì)象將會(huì)放在一個(gè)稱為 F-Queue 的對(duì)隊(duì)列中,虛擬機(jī)會(huì)觸發(fā)一個(gè) Finalize()線程去執(zhí)行,此線程是低優(yōu)先級(jí)的,并且虛擬機(jī)不會(huì)承諾一直等待它運(yùn)行完,這是因?yàn)槿绻?finalize()執(zhí)行緩慢或者發(fā)生了死鎖,那么就會(huì)造成 FQueue 隊(duì)列一直等待,造成了內(nèi)存回收系統(tǒng)的崩潰。GC 對(duì)處于 F-Queue 中的對(duì)象進(jìn)行第二次被標(biāo)記,這時(shí),該對(duì)象將被移除”即將回收”集合,等待回收。

003垃圾回收方式?

GC按照回收區(qū)域又分為兩大種類型:部分收集和整堆收集。
部分收集(Partial GC):不是完整收集整個(gè)Java堆的垃圾收集。其中又分為:
1. 新生代收集(Minor GC/Young GC):只是新生代的垃圾收集
當(dāng)年輕代空間不足時(shí),就會(huì)觸發(fā)MinorGC,這里的年輕代滿指的是Eden代滿,Survivor滿不會(huì)引發(fā)GC。
2. 老年代收集(MajorGC/o1dGC):只是老年代的圾收集。
3. 混合收集(MixedGC):收集整個(gè)新生代以及部分老年代的垃圾收集。
整堆收集(FullGC):收集整個(gè)java堆和方法區(qū)的垃圾收集。

004描述下GC過程。

1.在初始階段,新創(chuàng)建的對(duì)象被分配到Eden區(qū),S0和S1的兩塊空間都為空。
2.當(dāng)Eden區(qū)滿了的時(shí)候,Minor GC 被觸發(fā) 。經(jīng)過掃描與標(biāo)記,不存活的對(duì)象被回收,存活的對(duì)象被復(fù)制到S0,并且存活的對(duì)象年齡都增大一歲。
3.當(dāng)Eden區(qū)又滿的時(shí)候,Minor GC再次被觸發(fā)。此時(shí)Eden區(qū) 和 S0區(qū)存活的對(duì)象要復(fù)制到S1。需要注意的是,此時(shí)Eden區(qū)和S0區(qū)被清空,S0中的對(duì)象復(fù)制到S1后其年齡要加1。
4.當(dāng)Eden區(qū)再次又滿的時(shí)候,MinorGC則重復(fù)上面過程,將Eden區(qū) 和 S1區(qū)存活的對(duì)象復(fù)制到S0。此時(shí)Eden區(qū)和S1區(qū)被清空,S0中的對(duì)象復(fù)制到S1后其年齡要加1。
5.經(jīng)過幾次Minor GC之后,當(dāng)存活對(duì)象的年齡達(dá)到一個(gè)閾值之后(-XX:MaxTenuringThreshold默認(rèn)是15),就會(huì)被從年輕代Promotion到老年代。
6.新生代 GC(Minor GC):指發(fā)生新生代的的垃圾收集動(dòng)作,Minor GC 非常頻繁,回收速度一般也比較快。
7.老年代 GC(Major GC/Full GC):指發(fā)生在老年代的 GC,出現(xiàn)了 Major GC 經(jīng)常會(huì)伴隨至少一次的 Minor GC(并非絕對(duì)),Major GC 的速度一般會(huì)比 Minor GC 的慢 10 倍以上。

005解釋強(qiáng)、軟、弱、虛引用?

JDK1.2 以前,一個(gè)對(duì)象只有被引用和沒有被引用兩種狀態(tài)。后來,Java 對(duì)引用的概念進(jìn)行了擴(kuò)充,將引用分為強(qiáng)引用(Strong Reference)、軟引用(Soft Reference)、弱引用(Weak Reference)、虛引用(Phantom Reference)4 種,這 4 種引用強(qiáng)度依次逐漸減弱。

006垃圾回收算法有哪些?

一共有 4 種:標(biāo)記-清除算法、復(fù)制算法、標(biāo)記整理算法、分代收集算法;

007什么是標(biāo)記-清除算法?

最基礎(chǔ)的收集算法是“標(biāo)記-清除”(Mark-Sweep)算法,分為“標(biāo)記”和“清除”兩個(gè)階段:首先標(biāo)記出所有需要回收的對(duì)象,在標(biāo)記完成后統(tǒng)一回收所有被標(biāo)記的對(duì)象。

008標(biāo)記-清除算法的缺點(diǎn)?

● 效率問題,標(biāo)記和清除兩個(gè)過程的效率都不高;
● 空間問題,標(biāo)記清除之后會(huì)產(chǎn)生大量不連續(xù)的內(nèi)存碎片,空間碎片太多可能會(huì)導(dǎo)致以后在程序運(yùn)行過程中需要分配較大對(duì)象時(shí),無法找到足夠的連續(xù)內(nèi)存而不得不提前觸發(fā)另一次垃圾收集動(dòng)作。

009什么是復(fù)制算法?

它將可用內(nèi)存按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當(dāng)這一塊的內(nèi)存用完了,就將還存活著的對(duì)象復(fù)制到另外一塊上面,然后再把已使用過的內(nèi)存空間一次清理掉。這樣使得每次都是對(duì)整個(gè)半?yún)^(qū)進(jìn)行內(nèi)存回收,內(nèi)存分配時(shí)也就不用考慮內(nèi)存碎片等復(fù)雜情況,只要移動(dòng)堆頂指針,按順序分配內(nèi)存即可,實(shí)現(xiàn)簡(jiǎn)單,運(yùn)行高效。只是這種算法的代價(jià)是將內(nèi)存縮小為了原來的一半。復(fù)制算法的執(zhí)行過程如下圖:

一般虛擬機(jī)都采用這種算法來回收新生代,因?yàn)樾律械膶?duì)象 98% 是“朝生夕死”的,所以并不需要按照 1:1 的比例來劃分內(nèi)存空間,而是將內(nèi)存分為一塊較大的 Eden 空間和兩塊較小的 Survivor 空間,每次使用 Eden 和其中一塊 Survivor 。當(dāng)回收時(shí),將 Eden 和 Survivor 中還存活著的對(duì)象一次性地復(fù)制到另外一塊 Survivor 空間上,最后清理掉 Eden 和剛才用過的 Survivor 空間。HotSpot 虛擬機(jī)默認(rèn) Eden:Survivor = 8:1,也就是每次新生代中可用內(nèi)存空間為整個(gè)新生代容量的 90%(其中一塊Survivor不可用),只有 10% 的內(nèi)存會(huì)被“浪費(fèi)”。當(dāng)然如果另外一塊 Survivor 空間沒有足夠空間存放上一次新生代收集下來的存活對(duì)象時(shí),這些對(duì)象將直接通過分配擔(dān)保機(jī)制進(jìn)入老年代。

010復(fù)制算法缺點(diǎn)?

復(fù)制算法適合年輕代,不適合老年代。因?yàn)樵趯?duì)象存活率較高時(shí)就要進(jìn)行較多的復(fù)制操作,效率將會(huì)變低。更關(guān)鍵的是復(fù)制算法需要有額外的空間進(jìn)行分配擔(dān)保,以應(yīng)對(duì)被使用的內(nèi)存中所有對(duì)象都 100% 存活的極端情況。

011什么是標(biāo)記-整理算法

根據(jù)老年代的特點(diǎn),有人提出了另外一種“標(biāo)記-整理”(Mark-Compact)算法,標(biāo)記過程仍然與“標(biāo)記-清除”算法一樣,但后續(xù)步驟不是直接對(duì)可回收對(duì)象進(jìn)行清理,而是讓所有存活的對(duì)象都向一端移動(dòng),然后直接清理掉端邊界以外的內(nèi)存。

012什么是分代收集算法?

"分代收集"(Generational Collection)算法是根據(jù)對(duì)象存活周期的不同將內(nèi)存劃分為幾塊并采用不同的垃圾收集算法。一般是把 Java 堆分為新生代和老年代,這樣就可以根據(jù)各個(gè)年代的特點(diǎn)采用最適當(dāng)?shù)氖占惴āT谛律校看卫占瘯r(shí)都發(fā)現(xiàn)有大批對(duì)象死去,只有少量存活,那就選用復(fù)制算法,只需要付出少量存活對(duì)象的復(fù)制成本就可以完成收集。而老年代中因?yàn)閷?duì)象存活率高、沒有額外空間對(duì)它進(jìn)行分配擔(dān)保,就必須使用“標(biāo)記—清理”或者“標(biāo)記—整理”算法來進(jìn)行回收。

013Stop The World是什么意思?

進(jìn)行垃圾收集時(shí),必須暫停其他所有工作線程,Sun將這種事情叫做"Stop The World"。

014什么情況下新生代對(duì)象會(huì)晉升到老年代?

如果新生代的垃圾收集器為Serial和ParNew,并且設(shè)置了-XX:PretenureSizeThreshold參數(shù),當(dāng)對(duì)象大于這個(gè)參數(shù)值時(shí),會(huì)被認(rèn)為是大對(duì)象,直接進(jìn)入老年代。
Young GC后,如果對(duì)象太大無法進(jìn)入Survivor區(qū),則會(huì)通過分配擔(dān)保機(jī)制進(jìn)入老年代。
對(duì)象每在Survivor區(qū)中“熬過”一次Young GC,年齡就增加1歲,當(dāng)它的年齡增加到一定程度(默認(rèn)為15歲,可以通過-XX:MaxTenuringThreshold設(shè)置),就將會(huì)被晉升到老年代中。
如果在Survivor區(qū)中相同年齡所有對(duì)象大小的總和大于Survivor空間的一半,年齡大于或等于該年齡的對(duì)象就可以直接進(jìn)入老年代,無須等到MaxTenuringThreshold中要求的年齡。

015新生代中Eden區(qū)和Survivor區(qū)的默認(rèn)比例?

在HotSpot虛擬機(jī)中,Eden區(qū)和Survivor區(qū)的默認(rèn)比例為8:1:1,即-XX:SurvivorRatio=8,其中Survivor分為From Survivor和ToSurvivor,因此Eden此時(shí)占新生代空間的80%。

016Minor GC ,Major GC,F(xiàn)ull GC是什么?

Minor GC是當(dāng)年輕代空間不足時(shí),就會(huì)觸發(fā)MinorGC,這里的年輕代滿指的是Eden代滿,Survivor滿不會(huì)引發(fā)GC(每次Minor GC會(huì)清理年輕代的內(nèi)存)。因?yàn)镴ava對(duì)象大多都具備朝生夕滅的特性,所以Minor GC非常頻繁,一般回收速度也比較快。這一定義既清晰又易于理解。Minor GC會(huì)引發(fā)STW,暫停其它用戶的線程,等垃圾回收結(jié)束,用戶線程才恢復(fù)運(yùn)行
Major GC指發(fā)生在老年代的GC,對(duì)象從老年代消失時(shí),我們說"Major Gc"或"Full GC"發(fā)生了。出現(xiàn)了MajorGc,經(jīng)常會(huì)伴隨至少一次的Minor GC(但非絕對(duì)的,在Paralle1 Scavenge收集器的收集策略里就有直接進(jìn)行MajorGC的策略選擇過程),也就是在老年代空間不足時(shí),會(huì)先嘗試觸發(fā)MinorGc。如果之后空間還不足,則觸發(fā)Major GC,Major GC的速度一般會(huì)比MinorGc慢1e倍以上,STW的時(shí)間更長(zhǎng),如果Major GC后,內(nèi)存還不足,就報(bào)OOM了;
Full GC是對(duì)年輕代和老年代都進(jìn)行垃圾回收,F(xiàn)ull GC 是開發(fā)或調(diào)優(yōu)中盡量要避免的,這樣暫時(shí)時(shí)間會(huì)短一些。

017Minor GC和Full GC的觸發(fā)條件?

Minor GC觸發(fā)條件: 當(dāng)Eden區(qū)滿時(shí),觸發(fā)Minor GC。
Full GC觸發(fā)條件:
(1)調(diào)用System.gc時(shí),系統(tǒng)建議執(zhí)行Full GC,但是不必然執(zhí)行
(2)老年代空間不足
(3)方法區(qū)空間不足
(4)通過Minor GC后進(jìn)入老年代的平均大小大于老年代的可用內(nèi)存
(5)由Eden區(qū)、From Space區(qū)向To Sp3ace區(qū)復(fù)制時(shí),對(duì)象大小大于To Space可存,則把該對(duì)象轉(zhuǎn)存到老年代,且老年代的可用內(nèi)存小于該對(duì)象大小;

018垃圾收集器有哪些?

019Serial垃圾收集器?

最基本的垃圾收集器,使用復(fù)制算法,單線程,雖然收集垃圾時(shí)需要暫停其他所有的工作線程,但簡(jiǎn)單高效,是 java 虛擬機(jī)運(yùn)行在 Client 模式下默認(rèn)的新生代垃圾收集器。
在HotSpot虛擬機(jī)中,使用-XX:+UseSerialGC參數(shù)可以指定年輕代和老年代都使用串行收集器。等價(jià)于新生代用Serial GC,且老年代用Serial Old GC。

020ParNew 垃圾收集器?

是 Serial 收集器的多線程版本 ,除了多線程進(jìn)行GC外,其他與Serial一樣,默認(rèn)開啟和 CPU 數(shù)目相同的線程數(shù) 。是很多 java虛擬機(jī)運(yùn)行在 Server 模式下新生代的默認(rèn)垃圾收集器。
1)可以通過選項(xiàng)"-XX:+UseParNewGC"手動(dòng)指定使用ParNew收集器執(zhí)行內(nèi)存回收任務(wù)。它表示年輕代使用并行收集器,不影響老年代
2)這里的多線程指的是垃圾收集時(shí),多線程并行,并不是垃圾收集與程序運(yùn)行并行
3)收集垃圾時(shí),也需要暫停其他所有工作線程,然后多線程收集垃圾。
4)單CPU環(huán)境下,因?yàn)榫€程切換,性能較差。

021Parallel Scavenge 收集器?

關(guān)注程序的吞吐量,即吞吐量?jī)?yōu)先。主要適用于在后臺(tái)運(yùn)算而不需要太多交互的任務(wù)。 自適應(yīng)調(diào)節(jié)策略也是 ParallelScavenge 收集器與 ParNew 收集器的一個(gè)重要區(qū)別。
1)吞吐量=運(yùn)行用戶代碼時(shí)間/(運(yùn)行用戶代碼時(shí)間+垃圾收集時(shí)間) ; 吞吐量?jī)?yōu)先,意味著在單位時(shí)間內(nèi),STW的時(shí)間最短;與之相對(duì)應(yīng)的 低延遲 就是暫停時(shí)間優(yōu)先,盡可能讓單次STW時(shí)間最短;這兩個(gè)無法同時(shí)實(shí)現(xiàn)。
2)收集垃圾時(shí),也需要暫停其他所有工作線程,然后多線程收集垃圾。
3)參數(shù)配置
-XX:+UseParallelGC 手動(dòng)指定年輕代使用Parallel并行收集器執(zhí)行內(nèi)存回收任務(wù)。 
-XX:+UseParallelOldGC 手動(dòng)指定老年代都是使用并行回收收集器。 
-XX:ParallelGCThreads 設(shè)置年輕代并行收集器的線程數(shù)。一般地,最好與CPU數(shù)量相等,以避免過多的線程數(shù)影響垃圾收集性能。  
-XX:MaxGCPauseMillis 設(shè)置垃圾收集器最大停頓時(shí)間(即STw的時(shí)間),單位是毫秒。 為了盡可能地把停頓時(shí)間控制在MaxGCPauseMills以內(nèi),收集器在工作時(shí)會(huì)調(diào)整Java堆大小或者其他一些參數(shù)。對(duì)于用戶來講,停頓時(shí)間越短體驗(yàn)越好。但是在服務(wù)器端,我們注重高并發(fā),整體的吞吐量。所以服務(wù)器端適合Parallel進(jìn)行控制。該參數(shù)使用需謹(jǐn)慎。 
-XX:GCTimeRatio 垃圾收集時(shí)間占總時(shí)間的比例(=1/(N+1))。用于衡量吞吐量的大小。 取值范圍(0, 100)。默認(rèn)值99,也就是垃圾回收時(shí)間不超過1%。與前一個(gè)-XX:MaxGCPauseMillis參數(shù)有一定矛盾性。暫停時(shí)間越長(zhǎng),Radio參數(shù)就容易超過設(shè)定的比例。  
-XX:+UseAdaptivesizePolicy 設(shè)置Parallel Scavenge收集器具有自適應(yīng)調(diào)節(jié)策略 。在這種模式下,年輕代的大小、Eden和Survivor的比例、晉升老年代的對(duì)象年齡等參數(shù)會(huì)被自動(dòng)調(diào)整,已達(dá)到在堆大小、吞吐量和停頓時(shí)間之間的平衡點(diǎn)。在手動(dòng)調(diào)優(yōu)比較困難的場(chǎng)合,可以直接使用這種自適應(yīng)的方式,僅指定虛擬機(jī)的最大堆、目標(biāo)的吞吐量(GCTimeRatio)和停頓時(shí)間(MaxGCPauseMills,讓虛擬機(jī)自己完成調(diào)優(yōu)工作。

022Serial Old?

1)是Serial的老年代版本,收集垃圾時(shí)也需要暫停其他所有的工作線程。
2)是Client模式下默認(rèn)的老年代垃圾收集器
3)Server模式下,搭配新生代的Parallel Scavenge 收集器使用(在 JDK1.5 之前版本中)。同時(shí)也作為老年代中使用 CMS 收集器的后備垃圾收集方案(當(dāng)CMS發(fā)生Concurrent Mode Failure)。

023Parallel Old收集器?

1)Parallel Scavenge的老年代版本
2)吞吐量?jī)?yōu)先,意味著在單位時(shí)間內(nèi),STW的時(shí)間最短;與之相對(duì)應(yīng)的 低延遲 就是暫停時(shí)間優(yōu)先,盡可能讓單次STW時(shí)間最短;這兩個(gè)無法同時(shí)實(shí)現(xiàn)。
3)若相同對(duì)于吞吐量要求較高,可以Parallel Scavenge搭配Parallel Old使用。

024介紹CMS垃圾收集器的特點(diǎn)?

CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時(shí)間為目標(biāo)的收集器。目前很大一部分的Java應(yīng)用集中在互聯(lián)網(wǎng)站或者B/S系統(tǒng)的服務(wù)端上,這類應(yīng)用尤其重視服務(wù)的響應(yīng)速度,希望系統(tǒng)停頓時(shí)間最短,以給用戶帶來較好的體驗(yàn)。CMS收集器就非常符合這類應(yīng)用的需求。
從名字(包含“Mark Sweep”)上就可以看出,CMS收集器是基于“標(biāo)記—清除”算法實(shí)現(xiàn)的,它的運(yùn)作過程可以分為6個(gè)步驟,包括:初始標(biāo)記、并發(fā)標(biāo)記、預(yù)處理、重新標(biāo)記、并發(fā)清除、重置。
CMS是一款優(yōu)秀的收集器,它的主要優(yōu)點(diǎn)在名字上已經(jīng)體現(xiàn)出來了:并發(fā)收集、低停頓,但是CMS還遠(yuǎn)達(dá)不到完美的程度,它有以下3個(gè)明顯的缺點(diǎn):
(1)CMS收集器對(duì)CPU資源非常敏感。
(2)CMS收集器無法處理浮動(dòng)垃圾(Floating Garbage),可能出現(xiàn)“Concurrent Mode Failure”失敗而導(dǎo)致另一次Full GC的產(chǎn)生。
(3)CMS是一款基于“標(biāo)記—清除”算法實(shí)現(xiàn)的收集器,這意味著收集結(jié)束時(shí)會(huì)有大量空間碎片產(chǎn)生。

025介紹下G1垃圾收集器的特點(diǎn)?

G1(Garbage-First)收集器是當(dāng)今收集器技術(shù)發(fā)展的最前沿成果之一。G1是一款面向服務(wù)端應(yīng)用的垃圾收集器。與其他GC收集器相比,G1具備如下特點(diǎn):并行與并發(fā)、分代收集、空間整合、可預(yù)測(cè)的停頓。
在G1之前的其他收集器進(jìn)行收集的范圍都是整個(gè)新生代或者老年代,而G1不再是這樣。使用G1收集器時(shí),Java堆的內(nèi)存布局就與其他收集器有很大差別,它將整個(gè)Java堆劃分為多個(gè)大小相等的獨(dú)立區(qū)域,雖然還保留有新生代和老年代的概念,但新生代和老年代不再是物理隔離的了,它們都是一部分Region(不需要連續(xù))的集合。
G1收集器之所以能建立可預(yù)測(cè)的停頓時(shí)間模型,是因?yàn)樗梢杂杏?jì)劃地避免在整個(gè)Java堆中進(jìn)行全區(qū)域的垃圾收集。G1跟蹤各個(gè)Region里面的垃圾堆積的價(jià)值大小(回收所獲得的空間大小以及回收所需時(shí)間的經(jīng)驗(yàn)值),在后臺(tái)維護(hù)一個(gè)優(yōu)先列表,每次根據(jù)允許的收集時(shí)間,優(yōu)先回收價(jià)值最大的Region(這也就是Garbage-First名稱的來由)。這種使用Region劃分內(nèi)存空間以及有優(yōu)先級(jí)的區(qū)域回收方式,保證了G1收集器在有限的時(shí)間內(nèi)可以獲取盡可能高的收集效率。
Mixed GC是G1垃圾收集器特有的收集方式,Mixed GC大致可劃分為全局并發(fā)標(biāo)記(global concurrent marking)和拷貝存活對(duì)象(evacuation)兩個(gè)大部分:
global concurrent marking是基于SATB形式的并發(fā)標(biāo)記,包括以下4個(gè)階段:初始標(biāo)記(Initial Marking)、并發(fā)標(biāo)記(Concurrent Marking)、最終標(biāo)記(Final Marking)、清理(Clean Up)。Evacuation階段是全暫停的。它負(fù)責(zé)把一部分region里的活對(duì)象拷貝到空region里去,然后回收原本的region的空間。

026垃圾收集器的比較圖。

垃圾收集器 分類 作用位置 使用算法 特點(diǎn) 適用場(chǎng)景
Serial 串行 新生代 復(fù)制算法 響應(yīng)速度優(yōu)先 適用于單CPU環(huán)境下的client模式
ParNew 并行 新生代 復(fù)制算法 響應(yīng)速度優(yōu)先 多CPU環(huán)境Server模式下與CMS配合使用
Parallel 并行 新生代 復(fù)制算法 吞吐量?jī)?yōu)先 適用于后臺(tái)運(yùn)算而不需要太多交互的場(chǎng)景
Serial Old 串行 老年代 標(biāo)記-整理(壓縮)算法 響應(yīng)速度優(yōu)先 適用于單CPU環(huán)境下的Client模式
Paraller Old  并行 老年代 標(biāo)記-整理(壓縮)算法 標(biāo)記-整理(壓縮)算法 適用于后臺(tái)運(yùn)算而不需要太多交互的場(chǎng)景
CMS 并發(fā) 老年代 標(biāo)記-清除算法 響應(yīng)速度優(yōu)先 適用于互聯(lián)網(wǎng)或B/S業(yè)務(wù)
G1 并發(fā)、并行 新生代、老年代 標(biāo)記-整理(壓縮)算法 響應(yīng)速度優(yōu)先 響應(yīng)速度優(yōu)先

目錄

返回頂部
主站蜘蛛池模板: 天天干天天操天天干 | 青青爽 | 亚洲一二区视频 | 四虎影视1515hh四虎免费 | 久久爱综合久久爱com | 寡妇野外啪啪一区二区 | 亚洲七七久久综合桃花 | www.婷婷| 奇米奇米777| 99精品视频在线播放2 | 国产成人a大片大片在线播放 | 伊人成年综合网 | 日本久久精品免视看国产成人 | 不卡视频在线观看 | 男人的天堂a在线 | 亚洲国产欧美日韩 | 亚洲欧洲一二三区机械有限公司 | 2021中文字幕亚洲精品 | 一本伊在人香蕉线观新在线 | 日韩小视频在线播放 | 免费一级大毛片a一观看不卡 | 狠狠色噜狠狠狠狠 | www.日韩视频 | 亚洲免费色视频 | 日本精品在线观看 | 一级毛片免费观看不卡的 | 久久精品99精品免费观看 | 午夜欧美福利视频 | 成人毛片免费视频播放 | 天天搞夜夜操 | 91精东果冻蜜桃星空麻豆 | 日本免费一二三区 | 奇米色网| 96精品专区国产在线观看高清 | 国产欧美日韩图片一区二区 | 国产成人久久综合二区 | 男女一级毛片免费播放 | 久久不射视频 | 九九热热 | 亚洲一区二区精品推荐 | 日本免费不卡视频一区二区三区 |