1. 程式人生 > 其它 >JVM 面試題

JVM 面試題

類的載入機制是什麼?

類載入到記憶體中主要有 5 個階段,分別為:

①載入:將 Class 檔案讀取到執行時資料區的 方法區內,在堆中建立 Class 物件,並封裝類在方法區的資料結構的過程。

②驗證:主要用 於確保 Class 檔案符合當前虛擬機器的要求,保障虛擬機器自身的安全,只有通過驗證的 Class 檔案才能被 JVM 載入。

③準備:主要工作是在方法區中為類變數分配記憶體空間並設定類中 變數的初始值。

④解析:將常量池中的符號引用替換為直接引用。

⑤初始化:主要通過執行 類構造器的方法為類進行初始化,該方法是在編譯階段由編譯器自動收集類中靜態 語句塊和變數的賦值操作組成的。JVM 規定,只有在父類的方法都執行成功後,子 類的方法才可以被執行。在一個類中既沒有靜態變數賦值操作也沒有靜態語句塊時,編譯器 不會為該類生成方法

JVM 有哪些垃圾回收演算法?

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

· 標記-整理演算法:標記無用物件,讓所有存活的物件都向一端移動,然後直接清除掉端邊界以外的記憶體。

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

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

JVM 有哪些垃圾回收器

· Serial:最早的單執行緒序列垃圾回收器。

· Serial Old:Serial 垃圾回收器的老年版本,同樣也是單執行緒的,可以作為 CMS 垃圾回收器的備選預案。

· ParNew:是 Serial 的多執行緒版本。

· Parallel 和 ParNew 收集器類似是多執行緒的,但 Parallel 是吞吐量優先的收集器,可以犧牲等待時間換取系統的吞吐量。

· Parallel Old 是 Parallel 老生代版本,Parallel 使用的是複製的記憶體回收演算法,Parallel Old 使用的是標記-整理的記憶體回收演算法。

· CMS:一種以獲得最短停頓時間為目標的收集器,非常適用 B/S 系統。

· G1:一種兼顧吞吐量和停頓時間的 GC 實現,是 JDK 9 以後的預設 GC 選項。