「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官

大家好,我是小寒!今天給小夥伴分享BAT等大廠Java崗面試必問的JVM問題,對於這些問題還整理了視頻講解分析和JVM學習筆記提供參考,在文末有免費獲取!有不對的地方也可以在評論區留言探討,也可以轉發關注下我以後會長期分享!

之前和朋友交流技術,都發現JVM這塊大廠是越來越在乎。具體的項目不說了,但他現在招新人必問JVM,無論對方有沒有在簡歷上寫熟悉JVM這塊。

你是否經歷過這樣的場景:

運行著的線上系統突然卡死,系統無法訪問,甚至直接OOM!新項目上線,對各種JVM參數設置一臉茫然,直接默認吧,然後就......想解決線上JVM GC問題,但卻無從下手。每次面試之前都要重新背一遍JVM的一些原理概念性的東西,然而面試官卻經常問你在實際項目中如何調優JVM參數,如何解決GC,OOM等問題,一臉懵圈!

「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官

大廠面試必問的JVM問題

1.說一下 JVM 運行時數據區?

不同虛擬機的運行時數據區可能略微有所不同,但都會遵從 Java 虛擬機規範, Java 虛擬機規範規定的區域分為以下 5 個部分:

程序計數器(Program Counter Register):當前線程所執行的字節碼的行號指示器,字節碼解析器的工作是通過改變這個計數器的值,來選取下一條需要執行的字節碼指令,分支、循環、跳轉、異常處理、線程恢復等基礎功能,都需要依賴這個計數器來完成;

Java 虛擬機棧(Java Virtual Machine Stacks):用於存儲局部變量表、操作數棧、動態鏈接、方法出口等信息;

本地方法棧(Native Method Stack):與虛擬機棧的作用是一樣的,只不過虛擬機棧是服務 Java 方法的,而本地方法棧是為虛擬機調用 Native 方法服務的;

Java 堆(Java Heap):Java 虛擬機中內存最大的一塊,是被所有線程共享的,幾乎所有的對象實例都在這裡分配內存;

方法區(Methed Area):用於存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯後的代碼等數據。

「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官

2.說一下堆棧的區別?

功能方面:堆是用來存放對象的,棧是用來執行程序的。

共享性:堆是線程共享的,棧是線程私有的。

空間大小:堆大小遠遠大於棧。

3.隊列和棧是什麼?有什麼區別?

隊列和棧都是被用來預存儲數據的。隊列允許先進先出檢索元素,但也有例外的情況,Deque 接口允許從兩端檢索元素。棧和隊列很相似,但它運行對元素進行後進先出進行檢索。

4.什麼是雙親委派模型?

在介紹雙親委派模型之前先說下類加載器。對於任意一個類,都需要由加載它的類加載器和這個類本身一同確立在 JVM 中的唯一性,每一個類加載器,都有一個獨立的類名稱空間。類加載器就是根據指定全限定名稱將 class 文件加載到 JVM 內存,然後再轉化為 class 對象。

類加載器分類:

  • 啟動類加載器(Bootstrap ClassLoader),是虛擬機自身的一部分,用來加載Java_HOME/lib/目錄中的,或者被 -Xbootclasspath 參數所指定的路徑中並且被虛擬機識別的類庫;
  • 其他類加載器:
  • 擴展類加載器(Extension ClassLoader):負責加載\\lib\\ext目錄或Java. ext. dirs系統變量指定的路徑中的所有類庫;
  • 應用程序類加載器(Application ClassLoader)。負責加載用戶類路徑(classpath)上的指定類庫,我們可以直接使用這個類加載器。一般情況,如果我們沒有自定義類加載器默認就是用這個加載器。

雙親委派模型:如果一個類加載器收到了類加載的請求,它首先不會自己去加載這個類,而是把這個請求委派給父類加載器去完成,每一層的類加載器都是如此,這樣所有的加載請求都會被傳送到頂層的啟動類加載器中,只有當父加載無法完成加載請求(它的搜索範圍中沒找到所需的類)時,子加載器才會嘗試去加載類。

「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官

5.說一下類裝載的執行過程?

類裝載分為以下 5 個步驟:

加載:根據查找路徑找到相應的 class 文件然後導入;

檢查:檢查加載的 class 文件的正確性;

準備:給類中的靜態變量分配內存空間;

解析:虛擬機將常量池中的符號引用替換成直接引用的過程。符號引用就理解為一個標示,而在直接引用直接指向內存中的地址;

初始化:對靜態變量和靜態代碼塊執行初始化工作。

6.怎麼判斷對象是否可以被回收?

一般有兩種方法來判斷:

引用計數器:為每個對象創建一個引用計數,有對象引用時計數器 +1,引用被釋放時計數 -1,當計數器為 0 時就可以被回收。它有一個缺點不能解決循環引用的問題;

可達性分析:從 GC Roots 開始向下搜索,搜索所走過的路徑稱為引用鏈。當一個對象到 GC Roots 沒有任何引用鏈相連時,則證明此對象是可以被回收的。

7.說一下 JVM 有哪些垃圾回收算法?

標記-清除算法:標記無用對象,然後進行清除回收。缺點:效率不高,無法清除垃圾碎片。

標記-整理算法:標記無用對象,讓所有存活的對象都向一端移動,然後直接清除掉端邊界以外的內存。

複製算法:按照容量劃分二個大小相等的內存區域,當一塊用完的時候將活著的對象複製到另一塊上,然後再把已使用的內存空間一次清理掉。缺點:內存使用率不高,只有原來的一半。

分代算法:根據對象存活週期的不同將內存劃分為幾塊,一般是新生代和老年代,新生代基本採用複製算法,老年代採用標記整理算法。

8.Java 中都有哪些引用類型?

9.Java 中都有哪些引用類型?

11.說一下 JVM 有哪些垃圾回收器?

12.詳細介紹一下 CMS 垃圾回收器?

13.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什麼區別?

14.說一下 JVM 調優的工具?

15.常用的 JVM 調優的參數都有哪些?

對於JVM的面試問題還是很重要的,阿里等這些大廠面試必問的問題,上面這些知識部分的JVM面試問題,對於JVM這一塊在學習的時候我整理過一些文檔筆記和麵試文檔,現在免費分享出來給有需要的朋友!上面的一些面試問題,還有視頻講解分析提供學習,有需要的朋友轉發後關注我私信回覆【資料】即可獲取資料免費領取方式,同時文末還有更多學習資料免費分享哦

「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官

JVM與性能優化知識筆記文檔目錄及內容

總目錄

「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官

Java內存區域筆記

「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官

JVM的執行子系統

「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官

性能優化筆記

「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官

垃圾回收器筆記

「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官

JVM常問面試題文檔

「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官

同時還分享更多精選整理的學習資料,包含(Dubbo、Redis、Netty、zookeeper、Spring cloud、分佈式、高併發等架構資料和完整的Java架構學習進階導圖!)

資料免費領取方式:轉發+轉發+轉發關注後,私信關鍵詞【資料】即可獲取免費領取方式!

重要的事說三遍,轉發+轉發+轉發!

「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官

架構學習視頻

「阿里Java面試解析」15道JVM靈魂拷問面試題,帶你吊打面試官


分享到:


相關文章: