Java面試總結之JVM

2021-01-08 開發者之家

對於Java程式設計師來說,JVM是面試過程中必備考題之一,只要我們掌握了其核心知識點,萬變不離其中,無論怎麼考你,都能應對自如。這篇文章我會根據在實際面試過程中遇到的考題,然後結合理論知識點,總結一下JVM的實戰考點。

Java Virtual Machine

一、JVM總體知識點

JVM的考點總體為分4大塊:

1.類的加載機制

2.JVM的內存結構

3.GC(包括GC算法,垃圾回收器)

4.JVM調優化

下面就這4方面的知識點分別進行歸納總結。

二、類的加載機制

類的加載過程是指將java編譯之後的class文件讀入到內存中,然後在堆區創建一個java.lang.Class對象,用於封裝類在方法區內的數據結構。類加載的最終目的是封裝類在方法區的數據結構,並向java程式設計師提供訪問方法區數據的接口。

這裡要理解類的加載過程就要先了解一下類的生命周期:

類的生命周期

類的生命周期一共分為5個階段,加載、連接、初始化、使用、卸載。

加載:類的加載過程主要完成3件事件,1.通過類的全限定名來獲取定義此類的二進位字節流,2.將這個類字節流代表的靜態存儲結構轉為方法區的運行時數據結構,3.在堆中生成一個代表此類的java.lang.Class對象,作為訪問方法區這些數據結構的入口。這個過程主要是類加載器完成的。

連接:這個過程分3個階段(校驗,準備,解析)完成。首先是校驗,此階段主要校驗class文件包含的信息是否符合jvm的規範。具體的校驗通過對文件格式,元數據,字節碼,符號引用驗證來完成。然後是準備,此階段為類變量分配內存,並將其初始化為默認值。最後是解析,即把類型中的符號引用轉換成為直接引用。具體的解析有4種,1.類或接口的解析,2.欄位解析,3.類方法解析,4.接口方法解析。完成這3個階段就完成了類的連接。

初始化:即執行類的構造器方法的過程。有5種方法可以完成初始化:1.調用new方法,2.使用Class類的newInstance方法(反射機制),3.使用Constructor類的newInstance方法(反射機制),4.使用Clone方法創建對象,5.使用(反)序列化機制創建對象

使用:完成類的初始化後,就可以對類進行實例化,在程序中進行使用了

卸載:當類被加載,連接和初始化後,它的生命周期就始了,當代表類的class對象不在被引用時,class對象就會結束生命周期,類在方法區內的數據就會被卸載。因此一個類何時結束生命,取決於代表它的class對象何時結束生命。

二、JVM的內存結構

JVM內存結構

Java中的內存分配:

Java程序在運行時,需要在內存中的分配空間。為了提高運算效率,就對數據進行了不同空間的劃分,因為每一片區域都有特定的處理數據方式和內存管理方式。

具體劃分為如下5個內存空間:(非常重要)

棧:存放局部變量

堆:存放所有new出來的東西

方法區:被虛擬機加載的類信息、常量、靜態常量等。

程序計數器(和系統相關)

本地方法棧

通常在面試中會圍繞這5個空間展開

三、GC算法及垃圾回收器

常見的垃圾回收算法:標記-清除,複製,標記-壓縮,分代收集

常用的垃圾回收集器:Serial收集器,ParNew收集器,Paralle收集器,Paralle Old收集器,Cms收集器,G1收集器

在實際應用中,我們可以根據不同的應用需求及伺服器的配置來配置相應的垃圾回收器。

四、JVM調優

jvm調優沒有一個固定模板配置說必須如何操作,它需要根據系統的情況不同對待。

但是可以有如下建議:

1、初始化內存和最大內存儘量保持一致,避免內存不夠用繼續擴充內存。最大內存不要超過物理內存,例如內存8g,你可以設置最大內存4g/6g但是不能超過8g否則加載類的時候沒有空間會報錯。

2、gc/full gc頻率不要太高、每次gc時間不要太長、根據系統應用來定。

常用調優工具:

jps:查看所有的jvm進程,包括進程ID,進程啟動的路徑等等。

jstack:觀察jvm中當前所有線程的運行情況和線程當前狀態。

jstat:利用JVM內建的指令對Java應用程式的資源和性能進行實時的命令行的監控,包括了對進程的classloader,compiler,gc情況;

jmap:監視進程運行中的jvm物理內存的佔用情況,該進程內存內,所有對象的情況,例如產生了哪些對象,對象數量;

jinfo:觀察進程運行環境參數,包括Java System屬性和JVM命令行參數。

五:JVM常會問的面試題

jvm的初始化步驟?類的加載過程jvm的內存結構?每塊內存分別存的什麼信息雙親委派模型GC算法,如何調優FULL GC的條件

相關焦點

  • JVM面試題之你能說說JVM有哪些內存區域嗎
    面試題你能說說JVM內存模型嗎?面試題分析面試官問這樣的問題,主要考察你對JVM內存模型是否了解。只有了解了內存模型,才能去搞明白GC原理,這個問題是網際網路公司面試最常問的了。jvm內存區域劃分主要存放局部變量等一些信息;程序計數器:記錄當前執行的字節碼指令的位置;執行引擎:執行代碼指令的;本地方法棧:調用本地作業系統裡面的一些方法,用於存放這些方法的局部變量之類的信息;堆外內存:JVM之外的內存區域,java
  • 10年Java後端老兵,三面阿里後面試總結
    但讓我印象最深刻的,還是去阿里的面試,因為我對面試官問我的那些技術問題,在其他廠子面試的,我覺得是都有一番風味。阿里很看重這個);其次面試官一般會針對您所做過的項目來做具體技術的交流,會比較關注個人對項目細節是不是掌握到位,主要考察java的技術基礎和原理,比如Spring框架以及資料庫和JVM三個方面,也會交流到分布式、線程池的實現等等,重點考察是不是有比較鑽研技術和技術上的亮點【不一定每個面都很厲害但一定要有亮點】;二面:
  • Java面試總結之Full GC
    在面試中我們會經常被問到full Gc相關的問題,比如什麼情況下會發生full gc,如何去排查頻繁發生full Gc的問題等。要想輕鬆自如的回答這些問題,我們就必須充分的去理解gc的觸發條件,gc回收的內容,以及gc具體的執行過程。掌握了這3個要點,full gc相關的問題就易如反掌了。一、gc的定義GC,即就是Java垃圾回收機制。
  • 面試筆記之必掌握的java核心技能點
    資料介紹,面試題超350題+這套面試題豐富全面,從 java常用命令到 java常用操作,再到jvm編程、主流服務、性能優化、自動化運維、面試技巧等幾乎覆蓋了所有 java 面試題,被同事稱為 java界 面試活字典,跟java相關的面試題,都會能夠得到找得到,部分有挑戰的題會附帶答案
  • 面試必問之JVM
    一、jvm運行時的數據區域jvm運行時數據區域 在jvm運行時的數據區域,方法區和堆是線程共享的區域,而java 棧,本地方法棧,程序計數器 這三部分是每個線程私有的空間。在執行Native方法時,由於Native方式不是由java語言編寫的,不需要存儲字節碼行號,因此此時程序計數器為空。2.java虛擬機棧 java 虛擬機棧是線程鎖私有的,生命周期和線程相同,隨著線程的開始而產生,隨著線程的消亡而結束。
  • 京東最詳細面試總結!幫你提高80%的Java面試成功率
    所以今天,作者就從自身和身邊的經歷出發,給你分享一些面試經歷和面試文檔。以下是我朋友三面拿下京東offer,和我們分享面試題的截圖。5.雙親委派模型介紹一下6.java中同步、volatile關鍵字7.jvm內存分區,為什麼要有新生代和老年代
  • 美團,順豐,同花順3家Java面試經驗總結
    LinkedList的區別(看了順豐很多面經,感覺他們很喜歡問這個)HashMap底層結構Hash碰撞線程同步方法,項目中有沒有用到場景題,有個定時任務,每10分鐘執行一次,從表中拿出來數據,進行一些處理,採用多線程如何實現,說是數據量很大,比如說每次10000條數據,怎麼分配給線程對JVM的理解(這個問題好大),後來溝通後說是JVM怎麼運行java
  • 超詳細的Java面試題總結(一)之Java基本知識 - CSDN
    最近在備戰面試的過程中,整理一下面試題。大多數題目都是自己手敲的,網上也有很多這樣的總結。自己感覺總是很亂,所以花了很久把自己覺得重要的東西總結了一下。先看下java中的編譯器和解釋器:Java中引入了虛擬機的概念,即在機器和編譯程序之間加入了一層抽象的虛擬的機器。這臺虛擬的機器在任何平臺上都提供給編譯程序一個的共同的接口。編譯程序只需要面向虛擬機,生成虛擬機能夠理解的代碼,然後由解釋器來將虛擬機代碼轉換為特定系統的機器碼執行。
  • 2020面試阿里字節跳動90%被問到的JVM面試題附答案
    這篇文章主要介紹了2020面試阿里字節跳動90%被問到的JVM面試題附答案,小編在網上看到覺得挺不錯的,現在分享給大家,也給大家做個參考。,就會拋出StackOverFlowError;本地方法棧:線程私有的,保存的是native方法的信息,當一個jvm創建的線程調用native方法後,jvm不會在虛擬機棧中為該線程創建棧幀,而是簡單的動態連結並直接調用該方法;堆:java堆是所有線程共享的一塊內存,幾乎所有對象的實例和數組都要在堆上分配內存,因此該區域經常發生垃圾回收的操作
  • java面試中常見的oom問題
    ,面試官經常會問:請談談你對OOM的認識?然後,你可能會說OOM就是out of memory,那如果你只是這麼答的話,這可不是面試官想要的答案;面試官又接著問,那你生產過程中有遇到哪些OOM呢?請你說說出常見的OOM問題?這時的你可能是懵的。先來做個調查,你對OOM了解嗎?
  • 「金九」3家Java面試經驗總結(同花順、順豐+美團)
    該內容總結來源於群友面試後收集整理。內存結構GC算法了解嗎jvm參數做過什麼項目?,我這邊也整理了相當多的面試專題資料(spring、mybatis、jvm。。。帶多了可以看附上的圖片)和多家公司的面試真題。
  • Java面試涼經總結篇:和大家聊聊我是怎麼沒的?
    ,就沒有一些面試失敗的經歷嗎?3、mybatis的原理是什麼4、java10、redis和mysql區別11、synchronized鎖12、jvm:這次面試失敗很大部分原因在於面試者自己,大意失荊州因為面試題看起來都比較容易,所以說並沒有上心,都只回答到了表面,然後等待面試官往深層裡面去問的時候
  • 5分鐘掌握JVM常用選項及相關知識,工作面試夠用了
    相信很多java工程師在工作中都會接觸到jvm,在面試中也會被問到跟java虛擬機有關的問題。我們為了把工作做好、把項目維護好、在系統出現fullgc等問題的時候,能夠像老司機一樣準確定位問題,很有必要把java虛擬機知識學習一遍。
  • 超詳細的JVM反射原理技術點總結
    反射獲取類實例 Class.forName("xxx");  首先調用了 java.lang.Class 的靜態方法,獲取類信息!注意:forName()反射獲取類信息,並沒有將實現留給了java,而是交給了jvm去加載!
  • Java 最常見的 200+ 面試題:面試必備
    聊回面試題這件事,這份面試清單原本是我們公司內部使用的,可到後來有很多朋友在微信上聯繫到我,讓我幫他們找一些面試方面的資料,而且這些關係也不太好拒絕,一呢,是因為這些找我,要面試題的人,不是我的好朋友的弟弟妹妹,就是我的弟弟妹妹們;二呢,我也不能馬馬虎虎的對付,受人之事忠人之命,我也不能辜負這份信任。
  • 幹了四年的Java面試官,給大家分享我面試時最愛問的Java面試題
    4.final 在 java 中有什麼作用?5.java 中的 Math.round(-1.5) 等於多少?6.String 屬於基礎的數據類型嗎?7.java 中操作字符串都有哪些類?它們之間有什麼區別?8.String str="i"與 String str=new String("i")一樣嗎?
  • java面試中必問的oom問題
    引言一般你去面試的時候,面試官經常會問:請談談你對OOM的認識?然後,你可能會說OOM就是out of memory,那如果你只是這麼答的話,這可不是面試官想要的答案;面試官又接著問,那你生產過程中有遇到哪些OOM呢?請你說說出常見的OOM問題?這時的你可能是懵的。
  • 2020面試字節、阿里,90%會問到的JVM面試題
    最近收到不少同學私信,說自己在大廠去面試的時候被問到JVM這一塊問到比較多,於是我整理了2020年面試阿里、字節、美團高頻問到的JVM真題,做了一份真題集。自己準備面試很容易準備不到關鍵重點,多看看真題就會好很多。超詳細的JVM面試真題!
  • JAVA面試必備筆記:必須掌握的核心技能點
    資料介紹,面試題超350題+這套面試題豐富全面,從 java常用命令到 java常用操作,再到jvm編程、主流服務、性能優化、自動化運維、面試技巧等幾乎覆蓋了所有 java 面試題,被同事稱為 java界 面試活字典,跟java相關的面試題,都會能夠得到找得到,部分有挑戰的題會附帶答案,所有文字可直接複製
  • 幹了四年的Java面試官,跟我說了他面試時最愛問的問題
    這裡也整理了其他大廠的面試題。需要的朋友可以私信我:333,即可全部獲得。final 在 java 中有什麼作用?java 中的 Math.round(-1.5) 等於多少?String 屬於基礎的數據類型嗎?java 中操作字符串都有哪些類?它們之間有什麼區別?String str=&34;與 String str=new String(「i」)一樣嗎?如何將字符串反轉?String 類的常用方法都有那些?