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)