首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME KVM 教程:Windows 環境下從源碼編譯 KVM 完整實錄

     編輯:J2ME

前言:為何要編譯 KVM?

KVM (Kilobyte VM) 是 JVM 中最精簡、最原始的版本之一,代碼結構清晰,未採用 HotSpot 的複雜優化,極適合學習 Java 程式執行原理。雖與現代桌面 JVM 有別,但核心原理相通。本文記錄在 Windows 上從源碼編譯 KVM 的完整流程。

環境準備清單

  1. KVM 源碼:Sun 官方下載(CLDC 1.1 或 1.0.4,差異不大)
  2. Cygwin:提供 make、gcc、grep、find 等 GNU 工具鏈。官網下載,安裝時勾選 gcc、make、grep、find。
    ※ 純 MinGW/Dev-Cpp 缺少 grep/find 等 shell 工具,不足以支援 KVM 建構腳本。
  3. JDK:任意 1.4+ 版本(筆者用 JBuilder 2005 附帶 JDK 1.4)

編譯步驟詳解

1. 解壓源碼並進入建構目錄

cd J2ME_cldc\build\win32

此目錄下的 makefile 為 Win32 環境建構腳本。

2. 設定 PATH 並執行 make

PATH=D:\CYGWIN\BIN;D:\Borland\JBuilder2005\jdk1.4\bin;%PATH%
make

關鍵點:Cygwin 的 bin 必須置於 Windows 系統路徑之前,否則系統自帶 find.exe 會與 Cygwin find.exe 衝突導致「*.java 找不到」錯誤。

3. 編譯過程核心邏輯

  • javac 編譯 J2ME_cldc/api 下所有 Java 檔
  • 打包為 classes.zip
  • jcc 工具 將核心 class 位元組碼轉為 C 語言陣列,生成 nativeFunctionTableWin.c 與 ROMJavaWin.c,內嵌核心類位元組碼,避免運行時再載入 class 檔
  • C 編譯器編譯 VM 核心 C 代碼並鏈接上述生成檔

4. VC6 專案編譯(可選)

路徑: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 方法。

常見坑點彙總

  • PATH 順序錯誤導致 find 衝突
  • 未安裝 Cygwin 完整工具鏈(缺 grep/find)
  • 嘗試直接開啟 VC6 專案而未先跑 make
  • JDK 版本過新導致語法不相容(建議 1.4/1.5)

結語

親手編譯 KVM 不僅能獲得可定制的 VM 二進位,更能深入理解 Java 核心類如何內嵌進 VM、Native 介面如何橋接、建構系統如何協同 Java/C 兩語言工具鏈。這是嵌入式 Java 開發者的必修實戰。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved