JVM-Java工程師必須掌握的知識點

java老頑童發表於2019-01-17

JVM

1、JVM基本概念:JVM是可執行Java程式碼的假想計算機 ,包括一套位元組碼指令集、一組暫存器、一個棧、一個垃圾回收,堆 和 一個儲存方法域。JVM是執行在作業系統之上的,它與硬體沒有直接的互動。

2、記憶體模型

  1. 方法區----儲存類資訊、靜態變數
  2. 虛擬機器棧----執行緒私有
  3. 本地方法棧----本地方法變數儲存區
  4. ----物件儲存區
  5. 程式計數器----控制程式執行順序

3、

  1. 新生代----Eden區、S0、S1
  2. 老年代----大物件和S0、s1轉移的物件
  3. 持久代----是方法區的實現,主要存放所有已載入的類資訊,方法資訊,常量池
  4. Tips:面試官如果問這個數字,必須答出來。新生代佔比:6:1:1,新生代和老年代比例為1:3

4、GC

  1. 標記垃圾演算法
    1. 引用計數法----淘汰,原因是會出現相互依賴問題
    2. 可達性演算法----GC樹
      1. Root節點:棧幀本地變數表引用物件、本地方法引用物件、方法區常量引用物件、方法區靜態變數引用的物件(詞語是不是很模糊,LZ也很模糊)
  2. 回收演算法
    1. 標記-清除----每個物件如果標記清除,GC時會被回收,缺點在於記憶體碎片較多,產生後果就是浪費空間
    2. 標記-整理----把標記的物件轉移到另一塊一樣的,空間換時間
    3. 分代回收----根據不同區域特點設定不同策略回收,新生代採取標記整理,老年代採取標記清除
    4. Tips:面試官如果問為什麼Java採取這個分而治之演算法呢?可以這樣回答:新生代轉成老年代物件很快,記憶體空間較少,GC頻率較多,所以在新生代有分割槽概念;而老年代物件基本不會動,GC機率較少,且都是大物件,用標記整理最合適。這樣使整體GC效率提高

5、類載入

  1. 流程
    1. 類載入
    2. 類連線
    3. 類初始化
    4. ...
  2. 類載入器
    1. Bootstrap載入器----lib\rt.jar 包含了很多Jdk原有的類class檔案
    2. Extension載入器----lib\ext*.jar
    3. App類載入器----classpath
    4. 自定義載入器----自定義載入類
  3. 雙親委派模式載入
    1. 主要是為了校驗,不讓程式設計者破壞jre執行環境
    2. 運用自定義類載入器可以實現熱部署. Java伺服器熱部署的實現原理

相關文章