8000
Skip to content

Johnny1110/gogo_jvm

Repository files navigation

Gogo JVM




Using GoLang to implement a simple JVM


Structure


  1. JVM Entry
  2. Classfile
  3. JVM Runtime Data Area
  4. instructions
  5. interpreter
  6. native


Version


MVP Plan (v0.1~v0.2)

這是一切的開始,起初只是好奇心,想做一個能跑 System.out.println() 的 JVM。到後面停不下來探索知識的慾望。 MVP 時期的筆記有些雜亂,移到 MVP Plan Documents 做紀念。



總覽:版本規劃

大版本 主題 子版本數 目標
v0.1.x ClassFile 解析 1 了解 .class 結構基礎
v0.2.x 核心執行引擎 11 單執行緒 Java 程式完整執行
v0.3.x 物件模型完善 4 GC/多執行緒 共同前置
v0.4.x 多執行緒 6 併發程式支援 + Safe Point
v0.5.x GC 專題 7 深入研究各種 GC 演算法


v0.2 - MVP JVM Project (Core Engine)

v0.2 目標是讓 GOGO_JVM 能執行大部分 Single-Thread 的 Java 程式。



v0.3 - Object Model (Pre-Work for GC/Multi-Thread)

v0.3 目標是能支援 Class 物件與基本反射,標準物件頭 (Mark Word), Reference 類型支援,完整的物件生命週期。後續可以實現多執行緒和 GC。



v0.4 - Multi-Thread (Pre-Work for GC)

v0.4 目標是實現 java.lang.Thread 類與基本執行緒管理。



v0.5 - GC

v0.5 深入研究實現各種 GC 演算法



後續可能涉足的領域

類加載器完善

目前:單一 ClassLoader 目標:完整的類加載器層次結構

目標:
├── 雙親委派模型
├── 類的隔離與共享
├── 動態類加載
├── 模組系統(Java 9+ Module)
└── OSGi 概念

實現內容:

  • Bootstrap ClassLoader
  • Extension ClassLoader
  • Application ClassLoader
  • 自定義 ClassLoader
  • Class Unloading(配合 GC)


JIT 編譯器

目前:解釋執行(慢) 目標:熱點代碼編譯成機器碼(快) - 理解現代 VM

目標:
├── 編譯器後端設計
├── 寄存器分配
├── 指令選擇
├── 內聯優化(Inlining)
├── 逃逸分析(Escape Analysis)
└── On-Stack Replacement (OSR)

實現路徑:

  • 熱點偵測(計數器)
  • 基本 IR(中間表示)設計
  • 簡單的機器碼生成(x86-64)
  • 方法內聯
  • 逃逸分析 + 標量替換


調試與監控工具

目標:實現 JVMTI / JMX 類似功能

目標:
├── 斷點機制
├── 單步執行
├── 變數查看
├── 性能分析(Profiling)
└── 記憶體分析(Heap Dump)

實現內容:

  • 調試協議(類似 JDWP)
  • 斷點表管理
  • Stack Trace 生成
  • Heap Histogram
  • GC 日誌與分析


開發邊學習隨心記:

  • Java Constant Pools: link
  • Java Method Descriptor: link
  • ClassLoader: 為什麼類別載入時的 static field slot ID 計算時不需要考慮父類別?: link
  • XorShift32: 用於生成 Object HashCode 的算法 link
  • private 方法會是由 invokespecial 處理而非 invokevirtuallink
  • Soft, Weak, Phantom References 的應用場景 link

About

Using GoLang to implement a simple JVM

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

  • 3A6C
0