日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【拥抱大厂系列】几个面试官常问的垃圾回收器,下次面试就拿这篇文章怼回去! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

先瞎比比一下,上一篇文章已經過去2個多月了,你大概會問我這段時間干什么去了,怎么沒有更新文章,那我告訴你,當然是面試去了,經過了一個多月的面試,身經百戰,已經拿了幾個offer,現在是時候把前段時間的知識儲備給大家分享出來了,順便也換種形式來給大家講講相關的知識。

接下來的每篇文章都會是先給出幾個問題,然后再知識點,然后再回答問題這樣的形式。

1 問題

這一段面試的時間面了很多的互聯網公司的大廠,也很幸運拿了幾個offer,現在也還是面試的過程中,可以說,這么多的面試,Java虛擬機是一個必問的知識點,而垃圾回收器更是重中之重,如果面試官拋出一個垃圾回收器的問題,你一臉懵逼,那估計這個面試是涼了。

比如,面試官一上來就狠狠的問了這幾個問題。

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

再來個深一點的問題?

  • CMS垃圾回收器哪個階段最耗時,會不會出現stw的問題呢?

沒有看過這些知識點是不是一臉懵逼。

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

2 死磕垃圾回收器

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

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

說完是不是一篇明朗,其實也就是那么回事。

2.1 新生代垃圾回收器

2.1.1 Serial

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

其實對于這個垃圾回收器,你只要記住是一個單線程、采用復制算法的,會進行“Stop The World” 即可,因為面試官一般不問這個,為什么,因為太簡單了,沒什么可問的唄。

好了,再放一張圖好吧,說明一下Serial的回收過程,完事。

說明:這張圖的意思就是單線程,新生代使用復制算法標記、老年代使用標記整理算法標記,就是這么簡單。

2.1.2 ParNew

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

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

最后再放一張回收過程圖;

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

*** 是不是很簡單,我在這里講這些知識點并不是為了深入去了解這些原理,基本的知道對于工作已經夠了,其實,主要還是應付面試官,哈哈。

2.1.3 Parallel Scavenge

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

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

這里需要注意的唯一的區別是:Parallel Scavenge收集器的目標是達到一個可控制的吞吐量(Throughput)

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

2.2 老年代垃圾回收器

2.2.1 Serial Old

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

在這里就可以出一個面試題了。

  • 為什么Serial使用的是復制算法,而Serial Old使用是標記-整理算法?

同一個爸爸,兒子長的天差地別,當然也有啊,哈哈。

其實,看了我前面的文章你可能就知道了,因為在新生代絕大多數的內存都是會被回收的,所以留下來的需要回收的垃圾就很少了,所以復制算法更合適,你可以發現,基本的老年代的都是使用標記整理算法,當然,CMS是個雜種哈。

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

2.2.2 Parallel Old

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

另外,有了Parallel Old垃圾回收器后,就出現了以“吞吐量優先”著稱的“男女朋友”收集器了,這就是:Parallel Old和Parallel Scavenge收集器的組合

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

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

3 總結

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

收集器串行、并行or并發新生代/老年代算法目標適用場景
Serial串行新生代復制算法響應速度優先單CPU環境下的Client模式
Serial Old串行老年代標記-整理響應速度優先單CPU環境下的Client模式、CMS的后備預案
ParNew并行新生代復制算法響應速度優先多CPU環境時在Server模式下與CMS配合
Parallel Scavenge并行新生代復制算法吞吐量優先在后臺運算而不需要太多交互的任務
Parallel Old并行老年代標記-整理吞吐量優先在后臺運算而不需要太多交互的任務

好了,這回就到這里了,開頭的幾個問題,你會了嗎?

另外,我花了3個月時間把Java學習和面試的總結整理成了一本電子書!目錄如下

現在免費分享大家,在我的公眾號好好學java回復Java面試即可獲取。

有收獲?希望老鐵們來個三連擊,給更多的人看到這篇文章

1、老鐵們,關注我的原創微信公眾號「好好學java」,專注于Java、數據結構和算法、微服務、中間件等技術分享,保證你看完有所收獲。

2、給俺點個贊唄,可以讓更多的人看到這篇文章,順便激勵下我繼續寫作,嘻嘻。

點贊是對我最大的鼓勵
↓↓↓↓↓↓

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。