java面試題 --- JVM之體系結構

1. JVM 由哪些區域構成?

  • 由類加載器和運行時數據區構成;運行時數據區又分爲線程私有和線程共享兩大區域,線程私有的包括程序計數器、虛擬機棧和本地方法棧,線程共享的包括堆和方法區。

2. 類加載器的作用是什麼?

  • 加載 class 文件,生成類的結構信息,將其存放在方法區。

3. 類加載器有哪些種類以及它們之間的關係是什麼?

  • Bootstrap ClassLoader,加載 lib 下面的類;Extension ClassLoader,加載擴展類,即 jre/ext 下面的類;Application ClassLoader,加載用戶編寫的類;還可以繼承 ClassLoader 類自定義類加載器。Application ClassLoader 是 Extension ClassLoader 的子類,Extension ClassLoader 又是 Bootstrap ClassLoader 的子類。

4. 什麼是雙親委派機制?

  • 簡單地說就是要加載類時先找自己的父類去進行加載。比如要加載 A.class,首先 Application ClassLoader 會先找自己的父類,即 Extension ClassLoader,Extension ClassLoader 又會先找自己的父類,即 Bootstrap ClassLoader,它沒加載到,再告訴 Extension ClassLoader,它又沒加載到,才輪到 Application ClassLoader 去加載。這就是雙親委派機制,可以保證優先加載 JDK 自己的類。

5. 類的加載過程是怎樣的?

  • 加載:將 class 文件加載進內存;
  • 驗證:驗證 class 文件的正確性;
  • 準備:給類中的靜態變量分配空間;
  • 解析:將 class 常量池中的符號引用替換成直接引用;
  • 初始化:對靜態變量和靜態代碼塊進行初始化。

6. 說說你對棧內存的認識?

  • 棧內存是線程私有的一塊區域,分爲虛擬機棧和本地方法棧。基本類型的變量、對象的引用變量和實例方法都是在棧中分配的。棧的內存地址是連續的,不存在垃圾回收。本地方法棧和虛擬機棧差不多,只不過本地方法棧是爲本地方法服務的。

7. 程序計數器的作用是什麼?

  • 記錄程序執行的位置,程序調用別的方法、循環、遞歸的時候,下一次要回到哪兒執行,就靠程序計數器記錄。

8. 方法區是物理上的劃分嗎?

  • 方法區是用來存儲類加載器生成的類的結構信息的,它是邏輯上的劃分,是一種規範,並不是具體的實現。jdk1.7 對方法區的實現叫做永久代,它存在於堆內存中;jdk1.8 對方法區的實現叫元空間,它共用物理內存。

9. 你對堆內存瞭解多少?

  • 堆是 JVM 中最大的一塊區域,存放數組以及對象。它又分爲新生代、老年代,內存佔比是 1:2 。新生代又分爲伊甸園區、from 區和 to 區,這三塊區域內存佔比爲 8:1:1 。對象在新生代的伊甸園區出生,經歷了若干次垃圾回收達到了年齡的對象就會存放到老年代。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章