簡(jiǎn)單回顧java垃圾回收器發(fā)展史|面試
Java垃圾回收器(GC)的發(fā)展史體現(xiàn)了Java平臺(tái)對(duì)性能優(yōu)化的不斷追求,旨在滿(mǎn)足各種應(yīng)用場(chǎng)景下對(duì)吞吐量、延遲和資源利用率的不同需求。以下是Java垃圾回收器發(fā)展的主要里程碑:
1. 早期的垃圾回收器
-
串行垃圾回收器(Serial GC):Java初始版本中的默認(rèn)GC,使用單線程進(jìn)行垃圾回收,適用于小型應(yīng)用和低并發(fā)環(huán)境。由于它在執(zhí)行垃圾回收時(shí)會(huì)暫停所有應(yīng)用線程(Stop-The-World, STW),因此并不適合高并發(fā)應(yīng)用。
2. 并行與并發(fā)垃圾回收器
-
并行垃圾回收器(Parallel GC):也被稱(chēng)為吞吐量收集器,使用多個(gè)線程來(lái)縮短垃圾回收的停頓時(shí)間,提高了處理能力,成為許多服務(wù)器應(yīng)用的首選。
-
并發(fā)標(biāo)記清除(CMS)垃圾回收器:目的是減少垃圾回收時(shí)的停頓時(shí)間,通過(guò)并發(fā)標(biāo)記和并發(fā)清除階段來(lái)實(shí)現(xiàn),適合對(duì)響應(yīng)時(shí)間有嚴(yán)格要求的應(yīng)用。
3. G1垃圾回收器
-
G1(Garbage-First)垃圾回收器:在Java 7中引入,旨在替代CMS收集器,提供更可預(yù)測(cè)的垃圾回收停頓時(shí)間。G1通過(guò)將堆分割成多個(gè)區(qū)域(Region)來(lái)管理,可以并行、并發(fā)地執(zhí)行垃圾回收,特別適用于大堆內(nèi)存的應(yīng)用。
4. 低延遲垃圾回收器
-
ZGC(Z Garbage Collector):從Java 11開(kāi)始可用,設(shè)計(jì)目標(biāo)是在大堆內(nèi)存情況下將停頓時(shí)間限制在幾毫秒內(nèi),同時(shí)不犧牲太多的吞吐量,實(shí)現(xiàn)極低延遲。
-
Shenandoah:與ZGC類(lèi)似,從Java 12開(kāi)始作為實(shí)驗(yàn)特性引入,其主要目標(biāo)也是減少GC停頓時(shí)間,適用于需要低延遲且堆內(nèi)存較大的應(yīng)用。
5. 發(fā)展趨勢(shì)和影響
隨著時(shí)間的推移,Java垃圾回收器的發(fā)展反映了對(duì)不同應(yīng)用需求的理解和滿(mǎn)足。早期,重點(diǎn)在于簡(jiǎn)化內(nèi)存管理和提高應(yīng)用吞吐量。隨后,隨著多核處理器的普及和應(yīng)用對(duì)延遲敏感度的增加,垃圾回收器的設(shè)計(jì)開(kāi)始更多地考慮并行處理能力和減少停頓時(shí)間。
Java垃圾回收器的發(fā)展史不僅展示了技術(shù)的進(jìn)步,也反映了社區(qū)對(duì)提升Java應(yīng)用性能和響應(yīng)性的不斷探索和努力。未來(lái),隨著新的硬件技術(shù)和軟件架構(gòu)的發(fā)展,Java垃圾回收器仍有進(jìn)一步優(yōu)化和創(chuàng)新的空間。
