KVM (Kilobyte VM) 是 JVM 中最精簡、最原始的版本之一,代碼結構清晰,未採用 HotSpot 的複雜優化,極適合學習 Java 程式執行原理。雖與現代桌面 JVM 有別,但核心原理相通。本文記錄在 Windows 上從源碼編譯 KVM 的完整流程。
cd J2ME_cldc\build\win32
此目錄下的 makefile 為 Win32 環境建構腳本。
PATH=D:\CYGWIN\BIN;D:\Borland\JBuilder2005\jdk1.4\bin;%PATH%
make
關鍵點:Cygwin 的 bin 必須置於 Windows 系統路徑之前,否則系統自帶 find.exe 會與 Cygwin find.exe 衝突導致「*.java 找不到」錯誤。
javac 編譯 J2ME_cldc/api 下所有 Java 檔classes.zipnativeFunctionTableWin.c 與 ROMJavaWin.c,內嵌核心類位元組碼,避免運行時再載入 class 檔路徑:J2ME_cldc\kvm\VmWin\build 下的 .dsw 專案檔。必須先完成 make 步驟,否則缺少 jcc 生成的兩個關鍵 C 檔無法建構。
編譯成功產生 VmWin.exe 或 kvm.exe(約 200+ KB,核心代碼僅 80 KB,其餘為 CLDC 核心類)。
# 編寫 HelloWorld.java
javac HelloWorld.java
# 無需 preverify,直接運行
kvm HelloWorld
Sun 官方 KVM 已內建 putchar native function,開發者可依此模式擴充自定 Native 方法。
親手編譯 KVM 不僅能獲得可定制的 VM 二進位,更能深入理解 Java 核心類如何內嵌進 VM、Native 介面如何橋接、建構系統如何協同 Java/C 兩語言工具鏈。這是嵌入式 Java 開發者的必修實戰。