JVM 調優 1:“精通 JVM 調優,有過 JVM 調優經驗”簡歷敢寫嗎?薪資漲 5k 的技巧

文章目錄

  • 前言
  • 一、部分大廠對于 JVM GC 的面試題
    • 1.1、百度
    • 1.2、順豐
    • 1.3、京東
    • 1.4、淘寶
    • 1.5、阿里、蘑菇街
  • 二、Garbage Collectors(GC)作何使用
  • 三、GC 的十種類型
  • 四、JVM 的版本參數信息
    • 4.1、查看 Java 啟動時所有默認的命令行參數
    • 4.2、查看 Java 啟動時 GC 的參數信息
  • 五、GC 的分代模型與分區模型
    • 5.1、分代模型
      • 5.1.1、新生代
      • 5.1.2、老年代
  • 總結


前言

現在除了一些有工作和開發經驗的大神,基本很少有人在簡歷上敢寫“精通 JVM 調優,有過 JVM 調優經驗”,因為應聘者如果寫這句話就意味著你的面試將會是很“難過”的,面試官會變著法的問你如何進行 JVM 系列調優,如果你的基礎比較薄弱或者是僅僅背面試題速成,那么你很可能在面試中露餡。JVM 作為 Java 的核心,面試后端開發工程師或者架構師這都是必備的技能。既然 JVM 如此重要,那我就在本系列中完整的過一遍,讓你敢于在簡歷上寫“精通 JVM 調優,有過 JVM 調優經驗”,薪資漲 5k!

在這里插入圖片描述


在聊 JVM 調優和 GC 之前,我們先看看當下就業環境中面試對于 JVM 和 GC 的一些相關面試題,看看企業開發崗需要什么樣的人才。

一、部分大廠對于 JVM GC 的面試題

說明:以下數據來源于 2019~2020 年一些大廠的面試題。

1.1、百度

  • CMS 和 G1 的異同。
  • G1 什么時候引發 FullGC?
  • 說一個最熟悉的垃圾回收算法。
  • 吞吐量優先和響應時間優先的回收器有哪些?

1.2、順豐

  • 怎么判斷內存泄漏?
  • 講一下 CMS 的流程。

1.3、京東

  • 為什么壓縮指針超過 32G 失效?

1.4、淘寶

  • 什么是內存泄漏?GC 調優有經驗嗎?一般出現 GC 問題你怎么解決?

1.5、阿里、蘑菇街

  • ThreadLocal 有沒有內存泄漏問題?
  • G1 兩個 Region 不是連續的,而且之間還有可達的引用,我現在要回收一個,另一個怎么處理?
  • 講一下 JVM 堆內存管理(對象分配過程)。
  • 聽說過 CMS 的并發預處理和并發可中斷預處理嗎?
  • 到底多大的對象會被直接扔到老年代?

看了面試題,作何感想?可能有人覺得簡單,有人一知半解,聽過但是不會。不要急!我們慢慢來。

二、Garbage Collectors(GC)作何使用

首先我們都知道,在 Java 當中,我們在創建一個對象之后,就可以無需再去管它,該對象不被使用變成一個垃圾之后,誰去進行處理?Garbage Collectors(垃圾回收器)。

備注:后續文章內容 Garbage Collectors 皆用 GC 代替。

三、GC 的十種類型

JVM 作為 Java 的樞紐,管理著全部的內存,而對于內存的分配和回收就是由垃圾回收器來控制。

從 JVM 的誕生到現在 2021 年,一共產生過十種類型的垃圾回收器,如下圖所示:

在這里插入圖片描述
這里呢大家可以對這十種垃圾回收器僅作了解,我們將會在后續的章節中一一為大家介紹。

四、JVM 的版本參數信息

現在企業開發絕大多數使用的版本為 1.8。我本地的開發版本也是 1.8,我們就通過該版本來進行演示。

在這里插入圖片描述
如果我們直接將程序部署到 JVM 上,沒有做過任何調優動作,1.8 版本的默認 GC 為 Parallel

可能有人會有疑問:如何查看開發環境下 JVM 默認的 GC 版本信息呢?別急,往下看。

首先我們來認識以下幾個命令,我們打開 CMD 命令界面。

4.1、查看 Java 啟動時所有默認的命令行參數

輸入以下 Shell 命令:

java -XX:+PrintCommandLineFlags

這是我們就可以看到打印出的 Java 啟動時所有默認的命令行參數,如下圖所示:

在這里插入圖片描述

4.2、查看 Java 啟動時 GC 的參數信息

如果只需要查看本地環境下的 GC 參數信息,我們輸入如下 Shell 命令即可:

java -XX:+PrintCommandLineFlags -version

我們可以從控制臺的返回信息得知,1.8.0_251-b08 版本所對應的默認 GC 為 Parallel,如下圖所示:

在這里插入圖片描述

五、GC 的分代模型與分區模型

上面我們已經說到,內存的分配和回收就是由垃圾回收器來控制。

我們將 GC 的使用分為兩大類,分別是:分代模型分區模型

  • 分代模型:兩個垃圾回收器混合控制系統中的垃圾回收。
  • 分區模型:不再分代,一個垃圾回收器就足夠。

在本節中我們將著重對分代模型進行介紹。

5.1、分代模型

分代模型將內存分為兩個大的部分,新生代和老年代

如下圖所示,左半部分為新生代,右半部分為老年代:

在這里插入圖片描述
新生代和老年代所對應的回收算法應用

  • 新生代大量死去,少量存活,采用復制算法。
  • 老年代存活率高,回收較少,采用MC或MS。

5.1.1、新生代

剛剛誕生的的對象為“新生”,存放在新生代區域里面。隨著程序的運行,大部分“新生對象”被垃圾回收。

5.1.2、老年代

垃圾回收器回收了多次沒有回收掉的對象被稱為“老年”,就被存放在老年代中。

在默認情況下 JDK 1.8 沒有調參數、調優用的就是 GC 的分代模型。


總結

在本文中我們通過面試題知道了大廠開發對于 JVM 的要求,暫時了解在 JVM 中存在的十種 GC,學會如何查看本地開發環境默認的 GC,掌握了 GC 的兩種使用方式,分代模型與分區模型,明白什么樣的對象屬于什么代,存放在內存中的什么位置。同時,在新生代和老年代中又會誕生各種各樣的垃圾回收算法,我們將在下一小節講解。

在這里插入圖片描述


我是白鹿,一個不懈奮斗的程序猿。望本文能對你有所裨益,歡迎大家的一鍵三連!若有其他問題、建議或者補充可以留言在文章下方,感謝大家的支持!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530646.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530646.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530646.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ip地址合不合法怎么看_電子印章合不合法?兩部門再發意見認定

近日,最高法、國家發改委聯合發布 《關于為新時代加快完善社會主義市場經濟體制提供司法服務和保障的意見》以助力經濟高質量發展、建設高標準市場體系為出發點和落腳點,從市場主體、產權保護、公平交易、市場秩序、民生保障、服務開放、高效解紛等七個方…

JVM 調優 2:GC 如何判斷對象是否為垃圾,三色標記算法應用原理及存在的問題?

文章目錄前言一、如何判斷一個對象是否為垃圾?1.1、reference count(引用計數)1.2、reference count(引用計數)存在的問題二、Root Searching(根可達算法或根搜索算法)2.1、Root Searching 釋義…

班尼機器人怎么拆_博鼎建筑科技外墻錯臺打磨機器人和外墻螺桿洞封堵機器人—自升造樓平臺1+N執行器...

繼上期的混凝土整平機和智能噴淋養護系統,本期給大家介紹的是實際應用在自升造樓平臺外墻環軌車上的外墻錯臺打磨機器人和外墻螺桿洞封堵機器人。外墻錯臺打磨機器人傳統外墻錯臺處理,需要人工拿鑿具對外墻面錯臺進行鑿平處理。鑿具重、操作人工容易疲勞…

架構師基礎必備:“腹有詩書氣自華”,馳騁一線大廠不是夢,抓緊收藏

文章目錄前言一、軟件1.1、何為軟件?1.2、計算機軟件的分類1.2.1、系統軟件1.2.2、應用軟件1.3、軟件系統體系結構1.3.1、C/S 結構(桌面應用程序)1.3.2、B/S 結構(Web 應用程序)1.3.3、Web 服務器與數據庫服務器1.3.4、…

JDK 7-JDK 21:Oracle Java SE 支持路線圖/Oracle Java SE Support Roadmap 持續更新

文章目錄前言一、Oracle Java SE 產品版本二、Java SE 8 的公共更新結束三、參考文檔總結前言 幾十年來,Java 生態系統已經成功地經歷了這個過程,經歷了十次主要的平臺修訂。長期強大的向后兼容性保護了整個生態系統的投資。同時,隨著時間的推…

multisim中輕觸開關在哪_現貨供應輕觸開關|品質確保|廠家直銷

輕觸開關是現今社會生活當中不可或缺的電子元器件之一,那么大家在使用的過程當中是否注意到一些細節問題。首先,我們要注意產品的放置要盡量避免接觸腐蝕性氣體以及過于潮濕的環境,這樣很容易造成產品的損壞,減少輕觸開關的使用壽…

DDoS 攻擊與防護(一):如何識別 DDoS 攻擊?DDoS 防護 ADS 服務有哪些?

文章目錄前言一、什么是 DDoS 防護 ADS?1.1、什么是 DDoS 攻擊?1.2、如何識別 DDoS 攻擊?1.3、從 Web 訪問流程分析 DDoS 攻擊1.4、DDoS 攻擊類型二、DDoS 防護 ADS 介紹2.1、Anti-DDoS 流量清洗2.2、DDoS 原生高級防護2.3、DDoS 高防三、DDo…

收藏功能_六款多功能榻榻米,裝完你家會大一半!超實用,收藏

原標題:六款多功能榻榻米,裝完你家會大一半!超實用,收藏當今社會城市的生活壓力大,在外日夜打拼,回到家中只想做一個慵懶派,隨性舒適的榻榻米,功能樣式豐富,能讓你徹底釋…

混凝土墻開洞_新樂專業混凝土切割報價適中

新樂專業混凝土切割報價適中粘碳纖維加固,屋頂加層。本公司采用目前的鋼筋混凝土切割結構分離和水鉆排孔技術。真正實現對不同規格和形狀的橋梁、道路、煙囪、建筑立柱、鋼筋砼墻體、磚混結構墻體、建筑大梁等建筑物、構筑物實施無損切割(傳統的建筑改造或局部拆除分…

class觸發后讓另一個class加樣式_Bootstrap的按鈕組樣式

將一系列的.btn包裹在.btn-group內&#xff0c;并使用我們提供的插件&#xff0c;可以實現選擇按鈕、選取塊狀區的行為功能。<div class"row mt-5 d-block"><div class"btn-group"><button class"btn btn-primary">Left</b…

碼云怎么創建公開的倉庫_使用碼云或GitHub搭建簡單的個人網站(補充hexo搭建博客)...

使用碼云或GitHub搭建個人網站碼云&#xff1a;1、新建一個倉庫路徑名會影響你的個人網站的網址(自行修改)&#xff0c;開源(公開)&#xff0c;其他默認我們點擊創建2、進入倉庫后&#xff0c;我們新建一個文件3、文件名為index.html&#xff0c;再寫入我們的html代碼然后“提交…

bsp模型適用于圖計算_【論文解讀】目標檢測之RFBnet模型

原創聲明&#xff1a;本文為 SIGAI 原創文章&#xff0c;僅供個人學習使用&#xff0c;未經允許&#xff0c;不能用于商業目的。其它機器學習、深度學習算法的全面系統講解可以閱讀《機器學習-原理、算法與應用》&#xff0c;清華大學出版社&#xff0c;雷明著&#xff0c;由SI…

win10雷電3接口驅動_“雷電3”接口知識大科普

近年來部分高端筆記本電腦在接口上會采用一種叫“雷電3”的新接口。今天小編就為大家解讀一下“雷電3”接口的特性。最早的雷電接口雷電接口是由Intel開發定制的、接口類型為mini DP&#xff0c;在雷電3接口出來之前&#xff0c;雷電1和雷電2都是作為在蘋果MAC上使用的&#xf…

springboot怎么返回404_深度分析:SpringBoot異常捕獲與封裝處理,看完你學會了嗎?...

簡介日常開發過程中&#xff0c;難免有的程序會因為某些原因拋出異常&#xff0c;而這些異常一般都是利用try &#xff0c;catch的方式處理異常或者throw&#xff0c;throws的方式拋出異常不管。這種方法對于程序員來說處理也比較麻煩&#xff0c;對客戶來說也不太友好&#xf…

新生成長記;關于zzulioj1056,幸運數字

剛剛接觸代碼的我&#xff0c;對計算機愈來愈好奇&#xff0c;開學的兩個月&#xff0c;幾乎沒看書只顧著做題&#xff0c;當然&#xff0c;不會就百度&#xff0c;或者看大佬的博客&#xff0c;這些都是好東西&#xff0c;實在看不懂的&#xff0c;就拿著跑去問學長&#xff0…

獲取form表單_【第1535期】前端 Form 的表單的一個通用解決方案

前言今日早讀文章由阿里布達投稿分享。布達&#xff0c;Alibaba Fusion項目組的。花名潕量。主要專注在設計系統、組件、可視化搭建這個領域正文從這開始&#xff5e;&#xff5e;Fusion Next - Form 表單解決方案前端的Form 表單主要用于解決數據獲取、數據校驗、數據賦值 這三…

c語言表白用代碼(1)

不多說&#xff0c;直接上代碼&#xff0c;有用拿走&#xff0c;侵權立刪。 希望大家盡早找到自己的另一半。 #include <stdio.h> #include <math.h> #include <stdlib.h> #define I 20 #define R 340 #include <string.h> int main() {char answer[4…

react取消捕獲_React學習筆記(三)

React學習筆記&#xff08;三&#xff09;&#xff0c;組件的生命周期React中組件也有生命周期&#xff0c;也就是說也有很多鉤子函數供我們使用, 組件的生命周期&#xff0c;我們會分為四個階段&#xff0c;初始化、運行中、銷毀、錯誤處理(16.3之后)初始化在組件初始化階段會…

zzulioj1111: 多個整數的逆序輸出(函數專題)

1111: 多個整數的逆序輸出&#xff08;函數專題&#xff09;時間限制: 1 Sec 內存限制: 128 MB 提交: 3521 解決: 2617 [提交] [狀態] [討論版] [命題人:admin] 題目描述 輸入n和n個整數&#xff0c;以與輸入順序相反的順序輸出這n個整數。要求不使用數組&#xff0c;而使用遞歸…

快捷鍵_AutoCAD 2021中的默認快捷鍵、新建或編輯快捷鍵

文&#xff1a;CAD鐘日銘。歡迎關注和點贊支持。在使用AutoCAD進行制圖的過程中&#xff0c;掌握一些快捷鍵會提高操作效率。所謂的快捷鍵是指用于啟動命令的鍵組合。例如&#xff0c;按CtrlN組合鍵(快捷鍵)新建圖形文件&#xff0c;按 CtrlO組合鍵可打開圖形文件&#xff0c;按…