日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【拥抱大厂系列】几个面试官常问的垃圾回收器,下次面试就拿这篇文章怼回去!

發(fā)布時(shí)間:2025/3/20 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【拥抱大厂系列】几个面试官常问的垃圾回收器,下次面试就拿这篇文章怼回去! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)個(gè)贊,看一看,好習(xí)慣!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收錄,這是我花了3個(gè)月總結(jié)的一線大廠Java面試總結(jié),本人已拿騰訊等大廠offer。

先瞎比比一下,上一篇文章已經(jīng)過(guò)去2個(gè)多月了,你大概會(huì)問(wèn)我這段時(shí)間干什么去了,怎么沒(méi)有更新文章,那我告訴你,當(dāng)然是面試去了,經(jīng)過(guò)了一個(gè)多月的面試,身經(jīng)百戰(zhàn),已經(jīng)拿了幾個(gè)offer,現(xiàn)在是時(shí)候把前段時(shí)間的知識(shí)儲(chǔ)備給大家分享出來(lái)了,順便也換種形式來(lái)給大家講講相關(guān)的知識(shí)。

接下來(lái)的每篇文章都會(huì)是先給出幾個(gè)問(wèn)題,然后再知識(shí)點(diǎn),然后再回答問(wèn)題這樣的形式。

1 問(wèn)題

這一段面試的時(shí)間面了很多的互聯(lián)網(wǎng)公司的大廠,也很幸運(yùn)拿了幾個(gè)offer,現(xiàn)在也還是面試的過(guò)程中,可以說(shuō),這么多的面試,Java虛擬機(jī)是一個(gè)必問(wèn)的知識(shí)點(diǎn),而垃圾回收器更是重中之重,如果面試官拋出一個(gè)垃圾回收器的問(wèn)題,你一臉懵逼,那估計(jì)這個(gè)面試是涼了。

比如,面試官一上來(lái)就狠狠的問(wèn)了這幾個(gè)問(wèn)題。

  • 你可以介紹一下Java虛擬機(jī)的垃圾回收器嗎?
  • 你可以介紹一下CMS垃圾回收器的原理嗎?
  • 你可以介紹一下G1垃圾回收器的原理嗎,跟CMS有什么區(qū)別?

再來(lái)個(gè)深一點(diǎn)的問(wèn)題?

  • CMS垃圾回收器哪個(gè)階段最耗時(shí),會(huì)不會(huì)出現(xiàn)stw的問(wèn)題呢?

沒(méi)有看過(guò)這些知識(shí)點(diǎn)是不是一臉懵逼。

好了,接下來(lái)我來(lái)講講這些垃圾回收器都是什么神仙,面試官為什么喜歡死磕這個(gè)呢?

2 死磕垃圾回收器

先上一張圖,這張圖是Java虛擬機(jī)的jdk1.7及以前版本的所有垃圾回收器,也可以說(shuō)是比較成熟的垃圾回收器,除了這些垃圾回收器,面試的時(shí)候最多也就再懟懟G1和ZGC了。

上面的表示是年輕代的垃圾回收器:Serial、ParNew、Parallel Scavenge,下面表示是老年代的垃圾回收器:CMS、Parallel Old、Serial Old,以及不分老年代和年輕代的G1。之間的相互的連線表示可以相互配合使用。

說(shuō)完是不是一篇明朗,其實(shí)也就是那么回事。

2.1 新生代垃圾回收器

2.1.1 Serial

Serial(串行)收集器是最基本、發(fā)展歷史最悠久的收集器,它是采用復(fù)制算法的新生代收集器,曾經(jīng)(JDK 1.3.1之前)是虛擬機(jī)新生代收集的唯一選擇。它是一個(gè)單線程收集器,只會(huì)使用一個(gè)CPU或一條收集線程去完成垃圾收集工作,更重要的是它在進(jìn)行垃圾收集時(shí),必須暫停其他所有的工作線程,直至Serial收集器收集結(jié)束為止(“Stop The World”)。

其實(shí)對(duì)于這個(gè)垃圾回收器,你只要記住是一個(gè)單線程、采用復(fù)制算法的,會(huì)進(jìn)行“Stop The World” 即可,因?yàn)槊嬖嚬僖话悴粏?wèn)這個(gè),為什么,因?yàn)樘?jiǎn)單了,沒(méi)什么可問(wèn)的唄。

好了,再放一張圖好吧,說(shuō)明一下Serial的回收過(guò)程,完事。

說(shuō)明:這張圖的意思就是單線程,新生代使用復(fù)制算法標(biāo)記、老年代使用標(biāo)記整理算法標(biāo)記,就是這么簡(jiǎn)單。

2.1.2 ParNew

ParNew收集器就是Serial收集器的多線程版本,它也是一個(gè)新生代收集器。除了使用多線程進(jìn)行垃圾收集外,其余行為包括Serial收集器可用的所有控制參數(shù)、收集算法(復(fù)制算法)、Stop The World、對(duì)象分配規(guī)則、回收策略等與Serial收集器完全相同。

需要注意一點(diǎn)是:除了Serial收集器外,目前只有它能和CMS收集器(Concurrent Mark Sweep)配合工作。

最后再放一張回收過(guò)程圖;

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-2bZwcbhL-1587606989424)(http://image.ouyangsihai.cn/FvsKnXGzEQd6WYdUmIgLcWoSHG4H)]

*** 是不是很簡(jiǎn)單,我在這里講這些知識(shí)點(diǎn)并不是為了深入去了解這些原理,基本的知道對(duì)于工作已經(jīng)夠了,其實(shí),主要還是應(yīng)付面試官,哈哈。

2.1.3 Parallel Scavenge

Parallel Scavenge收集器也是一個(gè)并行多線程新生代收集器,它也使用復(fù)制算法

Parallel Scavenge收集器的特點(diǎn)是它的關(guān)注點(diǎn)與其他收集器不同,CMS等收集器的關(guān)注點(diǎn)是盡可能縮短垃圾收集時(shí)用戶線程的停頓時(shí)間。

這里需要注意的唯一的區(qū)別是:Parallel Scavenge收集器的目標(biāo)是達(dá)到一個(gè)可控制的吞吐量(Throughput)

我們知道,停頓時(shí)間越短就越適合需要與用戶交互的程序,良好的響應(yīng)速度能提升用戶體驗(yàn)。而高吞吐量則可以高效率地利用CPU時(shí)間,盡快完成程序的運(yùn)算任務(wù),主要適合在后臺(tái)運(yùn)算而不需要太多交互的任務(wù)

2.2 老年代垃圾回收器

2.2.1 Serial Old

Serial Old 是Serial收集器的老年代版本,它同樣是一個(gè)單線程收集器,使用“標(biāo)記-整理”(Mark-Compact)算法。

在這里就可以出一個(gè)面試題了。

  • 為什么Serial使用的是復(fù)制算法,而Serial Old使用是標(biāo)記-整理算法?

同一個(gè)爸爸,兒子長(zhǎng)的天差地別,當(dāng)然也有啊,哈哈。

其實(shí),看了我前面的文章你可能就知道了,因?yàn)樵谛律^大多數(shù)的內(nèi)存都是會(huì)被回收的,所以留下來(lái)的需要回收的垃圾就很少了,所以復(fù)制算法更合適,你可以發(fā)現(xiàn),基本的老年代的都是使用標(biāo)記整理算法,當(dāng)然,CMS是個(gè)雜種哈。

它的工作流程與Serial收集器相同,下圖是Serial/Serial Old配合使用的工作流程圖:

2.2.2 Parallel Old

Parallel Old收集器是Parallel Scavenge收集器的老年代版本,使用多線程和“標(biāo)記-整理”算法,是不是前面說(shuō)的,老年代出了雜種CMS不是“標(biāo)記-整理”算法,其他都是。

另外,有了Parallel Old垃圾回收器后,就出現(xiàn)了以“吞吐量?jī)?yōu)先”著稱的“男女朋友”收集器了,這就是:Parallel Old和Parallel Scavenge收集器的組合

Parallel Old收集器的工作流程與Parallel Scavenge相同,這里給出Parallel Scavenge/Parallel Old收集器配合使用的流程圖:

你是不是以為我還要講CMS和G1,我任性,這幾個(gè)面試重點(diǎn)還是得死磕它,下回分解哈。

3 總結(jié)

這里把上面的這些垃圾回收器做個(gè)總結(jié),看完這個(gè),面試給面試官講的時(shí)候思路就非常清晰了。

收集器串行、并行or并發(fā)新生代/老年代算法目標(biāo)適用場(chǎng)景
Serial串行新生代復(fù)制算法響應(yīng)速度優(yōu)先單CPU環(huán)境下的Client模式
Serial Old串行老年代標(biāo)記-整理響應(yīng)速度優(yōu)先單CPU環(huán)境下的Client模式、CMS的后備預(yù)案
ParNew并行新生代復(fù)制算法響應(yīng)速度優(yōu)先多CPU環(huán)境時(shí)在Server模式下與CMS配合
Parallel Scavenge并行新生代復(fù)制算法吞吐量?jī)?yōu)先在后臺(tái)運(yùn)算而不需要太多交互的任務(wù)
Parallel Old并行老年代標(biāo)記-整理吞吐量?jī)?yōu)先在后臺(tái)運(yùn)算而不需要太多交互的任務(wù)

好了,這回就到這里了,開(kāi)頭的幾個(gè)問(wèn)題,你會(huì)了嗎?

另外,我花了3個(gè)月時(shí)間把Java學(xué)習(xí)和面試的總結(jié)整理成了一本電子書(shū)!目錄如下

現(xiàn)在免費(fèi)分享大家,在我的公眾號(hào)好好學(xué)java回復(fù)Java面試即可獲取。

有收獲?希望老鐵們來(lái)個(gè)三連擊,給更多的人看到這篇文章

1、老鐵們,關(guān)注我的原創(chuàng)微信公眾號(hào)「好好學(xué)java」,專注于Java、數(shù)據(jù)結(jié)構(gòu)和算法、微服務(wù)、中間件等技術(shù)分享,保證你看完有所收獲。

2、給俺點(diǎn)個(gè)贊唄,可以讓更多的人看到這篇文章,順便激勵(lì)下我繼續(xù)寫(xiě)作,嘻嘻。

點(diǎn)贊是對(duì)我最大的鼓勵(lì)
↓↓↓↓↓↓

總結(jié)

以上是生活随笔為你收集整理的【拥抱大厂系列】几个面试官常问的垃圾回收器,下次面试就拿这篇文章怼回去!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。