2.幾種垃圾回收機(jī)制
2.1.標(biāo)記-清除收集器
這種收集器首先遍歷對象圖并標(biāo)記可到達(dá)的對象,然后掃描堆棧以尋找未標(biāo)記對象并釋放它們的內(nèi)存。這種收集器一般使用單線程工作并停止其他操作。
2.2.標(biāo)記-壓縮收集器 有時(shí)也叫標(biāo)記-清除-壓縮收集器,與標(biāo)記-清除收集器有相同的標(biāo)記階段。在第二階段,則把標(biāo)記對象復(fù)制到堆棧的新域中以便壓縮堆棧。這種收集器也停止其他操作。
2.3.復(fù)制收集器
這種收集器將堆棧分為兩個(gè)域,常稱為半空間。每次僅使用一半的空間,jvm生成的新對象則放在另一半空間中。gc運(yùn)行時(shí),它把可到達(dá)對象復(fù)制到另一半空間,從而壓縮了堆棧。這種方法適用于短生存期的對象,持續(xù)復(fù)制長生存期的對象則導(dǎo)致效率降低。
2.4.增量收集器 增量收集器把堆棧分為多個(gè)域,每次僅從一個(gè)域收集垃圾。這會(huì)造成較小的應(yīng)用程序中斷。
2.5.分代收集器 這種收集器把堆棧分為兩個(gè)或多個(gè)域,用以存放不同壽命的對象。jvm生成的新對象一般放在其中的某個(gè)域中。過一段時(shí)間,繼續(xù)存在的對象將獲得使用期并轉(zhuǎn)入更長壽命的域中。分代收集器對不同的域使用不同的算法以優(yōu)化性能。
2.6.并發(fā)收集器 并發(fā)收集器與應(yīng)用程序同時(shí)運(yùn)行。這些收集器在某點(diǎn)上(比如壓縮時(shí))一般都不得不停止其他操作以完成特定的任務(wù),但是因?yàn)槠渌麘?yīng)用程序可進(jìn)行其他的后臺操作,所以中斷其他處理的實(shí)際時(shí)間大大降低。
2.7.并行收集器 并行收集器使用某種傳統(tǒng)的算法并使用多線程并行的執(zhí)行它們的工作。在多cpu機(jī)器上使用多線程技術(shù)可以顯著的提高java應(yīng)用程序的可擴(kuò)展性。