Java 運(yùn)行時(shí)數(shù)據(jù)區(qū)
JVM垃圾收集器算法
- 標(biāo)記– 清除算法(Mark-Sweep)
從”GC Roots”集合開始媳危,將內(nèi)存整個(gè)遍歷一次零抬,保留所有可以被GC Roots直接或間接引用到的對(duì)象,而剩下的對(duì)象都當(dāng)作垃圾對(duì)待并回收贰您,這個(gè)算法需要中斷進(jìn)程內(nèi)其它組件的執(zhí)行并且可能產(chǎn)生內(nèi)存碎片
- 復(fù)制算法(Copying)
將現(xiàn)有的內(nèi)存空間分為兩快昔园,每次只使用其中一塊,在垃圾回收時(shí)將正在使用的內(nèi)存中的存活對(duì)象復(fù)制到未被使用的內(nèi)存塊中,之后,清除正在使用的內(nèi)存塊中的所有對(duì)象攀芯,交換兩個(gè)內(nèi)存的角色,完成垃圾回收文虏。
- 標(biāo)記– 整理算法(Mark-Compact)
先需要從根節(jié)點(diǎn)開始對(duì)所有可達(dá)對(duì)象做一次標(biāo)記侣诺,但之后,它并不簡(jiǎn)單地清理未標(biāo)記的對(duì)象氧秘,而是將所有的存活對(duì)象壓縮到內(nèi)存的一端年鸳。之后,清理邊界外所有的空間丸相。這種方法既避免了碎片的產(chǎn)生搔确,又不需要兩塊相同的內(nèi)存空間,因此已添,其性價(jià)比比較高妥箕。
- 分代收集算法(GenerationalCollection)
將所有的新建對(duì)象都放入稱為年輕代的內(nèi)存區(qū)域,年輕代的特點(diǎn)是對(duì)象會(huì)很快回收更舞,因此畦幢,在年輕代就選擇效率較高的復(fù)制算法。當(dāng)一個(gè)對(duì)象經(jīng)過幾次回收后依然存活缆蝉,對(duì)象就會(huì)被放入稱為老生代的內(nèi)存空間宇葱。對(duì)于新生代適用于復(fù)制算法,而對(duì)于老年代則采取標(biāo)記-壓縮算法刊头。
內(nèi)存分配策略
- 對(duì)象優(yōu)先在新生代分配
- 對(duì)象直接進(jìn)入老年代
- 長(zhǎng)期存活的對(duì)象將進(jìn)入老年代
JVM垃圾收集器
-
CMS收集器
-
G1收集器