JVM相關面試題及答案(小結)
1. 類的實例化順序,比如父類靜態(tài)數(shù)據,構造函數(shù),字段,子類靜態(tài)數(shù)據,構造函數(shù),字段,他們的執(zhí)行順序
答:先靜態(tài)、先父后子。
先靜態(tài):父靜態(tài) > 子靜態(tài)
優(yōu)先級:父類 > 子類 靜態(tài)代碼塊 > 非靜態(tài)代碼塊 > 構造函數(shù)
一個類的實例化過程:
1,父類中的static代碼塊,當前類的static
2,順序執(zhí)行父類的普通代碼塊
3,父類的構造函數(shù)
4,子類普通代碼塊
5,子類(當前類)的構造函數(shù),按順序執(zhí)行。
6,子類方法的執(zhí)行,
2. JVM內存分配


3. Java 8的內存分代改進
從永久代到元空間,在小范圍自動擴展永生代避免溢出
4. JVM垃圾回收機制,何時觸發(fā)MinorGC等操作
分代垃圾回收機制:不同的對象生命周期不同。把不同生命周期的對象放在不同代上,不同代上采用最合適它的垃圾回收方式進行回收。
JVM中共劃分為三個代:年輕代、年老代和持久代,
年輕代:存放所有新生成的對象;
年老代:在年輕代中經歷了N次垃圾回收仍然存活的對象,將被放到年老代中,故都是一些生命周期較長的對象;
持久代:用于存放靜態(tài)文件,如Java類、方法等。
新生代的垃圾收集器命名為“minor gc”,老生代的GC命名為”Full Gc 或者Major GC”.其中用System.gc()強制執(zhí)行的是Full Gc.
判斷對象是否需要回收的方法有兩種:
1.引用計數(shù)
當某對象的引用數(shù)為0時,便可以進行垃圾收集。
2.對象引用遍歷
果某對象不能從這些根對象的一個(至少一個)到達,則將它作為垃圾收集。在對象遍歷階段,gc必須記住哪些對象可以到達,以便刪除不可到達的對象,這稱為標記(marking)對象。
觸發(fā)GC(Garbage Collector)的條件:
1)GC在優(yōu)先級最低的線程中運行,一般在應用程序空閑即沒有應用線程在運行時被調用。
2)Java堆內存不足時,GC會被調用。
5. jvm中一次完整的GC流程(從ygc到fgc)是怎樣的,重點講講對象如何晉升到老年代等
答:對象優(yōu)先在新生代區(qū)中分配,若沒有足夠空間,Minor GC;
大對象(需要大量連續(xù)內存空間)直接進入老年態(tài);長期存活的對象進入老年態(tài)。如果對象在新生代出生并經過第一次MGC后仍然存活,年齡+1,若年齡超過一定限制(15),則被晉升到老年態(tài)。
6. 你知道哪幾種垃圾收集器,各自的優(yōu)缺點,重點講下cms,g1

7. Eden和Survivor的比例分配等
默認比例8:1。
大部分對象都是朝生夕死。
復制算法的基本思想就是將內存分為兩塊,每次只用其中一塊,當這一塊內存用完,就將還活著的對象復制到另外一塊上面。復制算法不會產生內存碎片。
8. 深入分析了Classloader,雙親委派機制
ClassLoader:類加載器(class loader)用來加載 Java 類到 Java 虛擬機中。Java 源程序(.java 文件)在經過 Java 編譯器編譯之后就被轉換成 Java 字節(jié)代碼(.class 文件)。類加載器負責讀取 Java 字節(jié)代碼,并轉換成 java.lang.Class 類的一個實例。
雙親委派機制:某個特定的類加載器在接到加載類的請求時,首先將加載任務委托給父類加載器,依次遞歸,如果父類加載器可以完成類加載任務,就成功返回;只有父類加載器無法完成此加載任務時,才自己去加載。
9. JVM的編譯優(yōu)化
10. 對Java內存模型的理解,以及其在并發(fā)中的應用
Java內存模型的主要目標: 定義程序中各個變量的訪問規(guī)則。
Java線程之間的通信由Java內存模型(本文簡稱為JMM)控制。
所有變量的存儲都在主內存,每條線程還都有自己的工作內存,線程的工作內存中保存了被該線程使用到的變量的主內存副本拷貝,線程對變量的所有操作必須在工作內存完成,而不能直接讀取主內存中的變量。不同的線程直接無法訪問對方工作內存中的變量,線程間變量的傳遞均需要通過主內存來完成。

線程間通信:
1. 首先,線程A把本地內存A中更新過的共享變量刷新到主內存中去。
2. 然后,線程B到主內存中去讀取線程A之前已更新過的共享變量。
11. 指令重排序,內存柵欄等
指令重排序:編譯器或運行時環(huán)境為了優(yōu)化程序性能而采取的對指令進行重新排序執(zhí)行的一種手段。在單線程程序中,對存在控制依賴的操作重排序,不會改變執(zhí)行結果;但在多線程程序中,對存在控制依賴的操作重排序,可能會改變程序的執(zhí)行結果。
12. OOM錯誤,stackoverflow錯誤,permgen space錯誤
13. JVM常用參數(shù)
JVM主要參數(shù):堆設置、回收器選擇(串行、并行、并發(fā)收集器)
14. tomcat結構,類加載器流程

目錄結構:
• /bin:存放windows或Linux平臺上啟動和關閉Tomcat的腳本文件
• /conf:存放Tomcat服務器的各種全局配置文件,其中最重要的是server.xml和web.xml
• /doc:存放Tomcat文檔
• /server:包含三個子目錄:classes、lib和webapps
• /server/lib:存放Tomcat服務器所需的各種JAR文件
• /server/webapps:存放Tomcat自帶的兩個WEB應用admin應用和 manager應用
• /common/lib:存放Tomcat服務器以及所有web應用都可以訪問的jar文件
• /shared/lib:存放所有web應用都可以訪問的jar文件(但是不能被Tomcat服務器訪問)
• /logs:存放Tomcat執(zhí)行時的日志文件
• /src:存放Tomcat的源代碼
• /webapps:Tomcat的主要Web發(fā)布目錄,默認情況下把Web應用文件放于此目錄
• /work:存放JSP編譯后產生的class文件
類加載器模式,雙親委派模式:

15. volatile的語義,它修飾的變量一定線程安全嗎
一個變量被定義為volatile之后,具備兩重語義:①保證此變量對所有線程的可見性,即當一條線程修改了這個值,新值對于其他所有線程來說是立即得知的,普通變量需要通過主內存?zhèn)鬟f。②禁止指令重排序優(yōu)化。
Volatile修飾的變量不一定是線程安全的,eg非原子操作a++等
16. g1和cms區(qū)別,吞吐量優(yōu)先和響應優(yōu)先的垃圾收集器選擇
CMS收集器:一款以獲取最短回收停頓時間為目標的收集器,是基于“標記-清除”算法實現(xiàn)的,分為4個步驟:初始標記、并發(fā)標記、重新標記、并發(fā)清除。
G1收集器:面向服務端應用的垃圾收集器,過程:初始標記;并發(fā)標記;最終標記;篩選回收。整體上看是“標記-整理”,局部看是“復制”,不會產生內存碎片。
吞吐量優(yōu)先的并行收集器:以到達一定的吞吐量為目標,適用于科學技術和后臺處理等。
響應時間優(yōu)先的并發(fā)收集器:保證系統(tǒng)的響應時間,減少垃圾收集時的停頓時間。適用于應用服務器、電信領域等。
17. 說一說你對環(huán)境變量classpath的理解?如果一個類不在classpath下,為什么會拋出ClassNotFoundException異常,如果在不改變這個類路徑的前期下,怎樣才能正確加載這個類?
classpath是javac編譯器的一個環(huán)境變量。它的作用與import、package關鍵字有關。package的所在位置,就是設置CLASSPATH當編譯器面對import packag這個語句時,它先會查找CLASSPATH所指定的目錄,并檢視子目錄java/util是否存在,然后找出名稱吻合的已編譯文件(.class文件)。如果沒有找到就會報錯!
動態(tài)加載包
18. 說一下強引用、軟引用、弱引用、虛引用以及他們之間和gc的關系
強引用:new出的對象之類的引用,
只要強引用還在,永遠不會回收
軟引用:引用但非必須的對象,內存溢出異常之前,回收
弱引用:非必須的對象,對象能生存到下一次垃圾收集發(fā)生之前。
虛引用:對生存時間無影響,在垃圾回收時得到通知。
到此這篇關于JVM相關面試題及答案(小結)的文章就介紹到這了,更多相關JVM面試題內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持腳本之家!
相關文章
這篇文章主要介紹了10道JVM常見面試題解析(附答案),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學2020-09-042020面試阿里字節(jié)跳動90%被問到的JVM面試題附答案(史上最全)
這篇文章主要介紹了2020面試阿里字節(jié)跳動90%被問到的JVM面試題附答案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-06-15- 這篇文章主要介紹了2020年JVM高頻率面試題整理,真是小編下了血本給大家整理出來的,值得大家收藏,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-09
這篇文章主要介紹了JVM面試題小結(2020最新版),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-02-21- 這篇文章主要介紹了2019年JVM面試都問了什么?(附答案解析),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-12-04
Java研發(fā)面試99題(含答案):JVM+Spring+MySQL+線程池+鎖
這篇文章主要介紹了Java研發(fā)面試99題,主要包括了JVM,Spring,MySQL,線程池,鎖等,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-07-16
JVM(Java 虛擬機)算是面試必問的問題的了,而但凡問 JVM 一定會問的第一個問題就是:講一講 JVM 的組成?那本文就注重講一下 JVM 的組成,感興趣的可以了解一下2019-04-10
這篇文章主要介紹了30道有趣的JVM面試題(小結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-11-26



