常見的JVM 面試題

半清丶冷歌發表於2022-04-04

1、講一講JVM的跨平臺與跨語言

跨平臺

我們寫的一個類,在不同的作業系統上(Linux、windows、Mac OS)執行,效果是一樣的。這就是JVM的跨平臺性。

跨語言

JVM只識別位元組碼,JVM不是翻譯Java檔案,而是識別class檔案,把它編譯成位元組碼在JVM上跑。這就是JVM的跨語言特徵。

2、什麼是JVM、與JDK有什麼區別

JVM(Java虛擬機器)+ Java標準開發庫 = JRE (JAVA的執行時環境)

JRE (JAVA的執行時環境) + 開發除錯診斷工具 = JDK

總結 : JDK 包含了 JVM

3、JVM執行時資料區有那些

執行時資料區

Java虛擬機器在執行Java程式的過程中會將它所管理的記憶體劃分為若干個不同的資料區域

JVM執行時資料區包括:

  • 程式計數器
  • Java虛擬機器
  • 本地方法棧
  • 記憶體堆
  • 方法區
  • 執行時常量池

4、什麼是記憶體堆?堆記憶體包含那些部分?

記憶體堆

**堆 **是JVM上最大的記憶體區域,我們申請的幾乎所有的物件,都儲存在這裡

堆空間劃分

  • 新生代(Eden + S0 + S1)
  • 老年代

5、什麼是記憶體溢位

記憶體溢位

指JVM可用記憶體不足

常見的記憶體溢位

  • 棧溢位 --> 死遞迴
  • 堆溢位
  • 方法區溢位
  • 本機直接記憶體溢位

6、什麼是記憶體洩漏?與記憶體溢位有什麼關係?

記憶體洩漏(memory Leak)

指無用的物件繼續佔用記憶體,你沒有再恰當的時機釋放記憶體

與記憶體溢位的關係

如果存在嚴重的記憶體洩漏問題,隨著時間的推移,則必然會引起記憶體溢位

記憶體洩漏一般是資源管理問題和程式BUG,記憶體溢位則是記憶體空間不足和記憶體洩漏的最終結果

7、物件頭包含那些部分?

物件頭一部分:用於儲存物件自身的執行時資料(Mark Word)。另一部分是型別指標

如果物件是一個Java陣列,那麼再物件頭中還有一塊用於記錄陣列長度的資料

8、Java 8 中預設使用的垃圾手機器是什麼?

Java 8預設情況下使用的是並行垃圾收集器(Parallel GC)

相關文章