金九銀十橫掃大廠!清華大佬總結出的21道JVM必備面試題,啃完輕鬆拿offer

JVM 是Java 程序員成長路上的一道坎,學習JVM之前,只需要知道代碼編譯成 Class,虛擬機加載 Class 運行就可以了,學習 JVM 之後,可以深入理解代碼從編譯到加載的過程、內存中對象的創建與垃圾回收、日常開發中快速定位性能問題等,當然也是面試不可缺少的加分項。

相信各位在面試的時候有不少人讓JVM給擋住了offer,因爲有前車之鑑,我在去面試前做好了充足的準備,網上大肆的蒐集相關面試資料,自己整理,篩選出了面試期間出現頻率最高的題目,在這裏分享出來,希望能讓各位看到的朋友避開那些坑,拿到心儀的offer!

對JVM這些面試題感興趣的,或者是想更深入學習JVM的朋友,我在這裏將這些文檔分享出來

需要的朋友注意留意文末

一.Java 類加載過程?

Java 類加載需要經歷一下 7 個過程:

1.加載

2.驗證

3.準備

4.解析

5.初始化

6.使用

7.卸載

二.描述一下 JVM 加載 Class 文件的原理機制?

類加載的主要步驟:

1.裝載。

2.鏈接。

3.檢查。

4.準備。

5.解析。

6.初始化。

三.Java 內存分配

1.寄存器:我們無法控制

2.靜態域:static定義的靜態成員

3.常量池:編譯是被確定並保存在 .class文件中的(final)常量值和一些文本修飾的符號引用(類和接口的全限定名,字段的名稱和描述符,方法和名稱和描述符)

4.非 RAM 存儲:硬盤永久儲存空間

5.堆內存:new創建的對象和數組,由java虛擬機自動垃圾回收器管理,存取速度慢

6.棧內存:基本類型的變量和對象的引用變量(堆內存空間的訪問地址),速度快,可以共享,但是大小與生存期必須確定,缺乏靈活性。

四.GC 是什麼? 爲什麼要有 GC

GC 是垃圾收集的意思(GabageCollection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java 提供的 GC 功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java 語言沒有提供釋放已分配內存的顯示操作方法。

五. 簡述 Java 垃圾回收機

在 Java 中,程序員是不需要顯示的去釋放一個對象的內存的,而是由虛擬機自行執行。在 JVM 中,有一個垃圾回收線程,它是低優先級的,在正常情況下是不會執行的,只有在虛擬機空閒或者當前堆內存不足時,纔會觸發執行,掃面那些沒有被任何引用的對象,並將它們添加到要回收的集合中,進行回收。

六. 如何判斷一個對象是否存活?(或者 GC 對象的判定方法)

判斷一個對象是否存活有兩種方法:

引用計數法

可達性算法(引用鏈法)

七. 垃圾回收的優點和原理。並考慮 2 種回收

八. 垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回

九. Java 中會存在內存泄漏嗎,請簡單描述

十. 深拷貝和淺拷貝

十一. System.gc() 和 Runtime.gc() 會做什麼事情?

十二. finalize() 方法什麼時候被調用?析構函數 (finalization) 的目的是什麼?

十三. 如果對象的引用被置爲 null,垃圾收集器是否會立即釋放對象佔用的內存?

十四. 什麼是分佈式垃圾回收(DGC)?它是如何工作的?

十五. 串行(serial)收集器和吞吐量(throughput)收集器的區別是什麼?

十六. 在 Java 中,對象什麼時候可以被垃圾回收?

十七. 簡述 Java 內存分配與回收策率以及 Minor GC 和 Major GC。

十八. JVM 的永久代中會發生垃圾回收麼?

十九. Java 中垃圾收集的方法有哪些?

二十. 什麼是類加載器,類加載器有哪些?

二十一. 類加載器雙親委派模型機制?

爲了大家的金九銀十衝刺,小編結合清華大佬,特意準備了一些Java架構資料,希望分享給有需要的朋友,學習技術內容包含有:Spring、Dubbo、MyBatis、RPC、源碼分析,高併發、高性能、分佈式、性能優化、微服務高級架構開發等等。

爲了不影響大家的閱讀體驗,小編直接截取了部分截圖,有需要深度瞭解學習的朋友,請關注小編,請私信回覆【學習】即可哦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章