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

KVM 移植指南核心筆記:架構、編譯器要求、源碼目錄結構與關鍵模塊

     編輯:J2ME

KVM 簡介

  • K Virtual Machine:專為資源受限設備 (手機、PDA) 設計的小型、可移植 JVM。
  • 核心設計目標:極小內存佔用 (核心 ~60KB)、**易移植** (C 語言實現)、**模塊化可裁剪**、**完整支持 Java 核心語言**。
  • 源於 Sun Spotless 系統 (早期 Palm OS KJava 稱為 Spotlet)。
  • J2ME CLDC/MIDP 架構的底層參考實現。

版本差異:1.0.2 → 1.0.3

  • 性能優化:重新設計監視器/同步、優化 JavaCodeCompact、字符串操作。
  • 增強事件處理、異步 I/O、網絡庫 (銜接 CLDC/MIDP)。
  • Java 級調試接口、預驗證器、緊湊 GC。
  • 更高效的 JAM (Java Application Manager)。
  • Windows/Unix 版支持命令行調整堆大小。

編譯器要求

  • ANSI C 兼容。
  • 基本類型位寬符合表 1 (char 8-bit、short 16-bit、int 16/32-bit、long 32-bit、指針 32-bit)。注意:Java long 為 64-bit,C long 僅 32-bit,需特殊處理 64-bit 運算。
  • 浮點支持 (若配置要求):float 32-bit、double 64-bit。
  • 驗證過的編譯器:Sun C 5.0/5.2/5.3、GCC 2.91.66/2.95.2、MSVC++ 6.0。

源碼目錄結構 (J2ME_cldc1.0.3 為例)

J2ME_cldc1.0.3/
├── api/          # Java 類庫源碼
├── bin/          # 可執行文件、編譯後類庫
├── build/        # 編譯 Makefile
├── docs/         # 文檔
├── jam/          # JAM 源碼
├── kvm/          # KVM 核心源碼
│   ├── VmCommon/ # 平台無關核心代碼
│   │   ├── h/    # 頭文件
│   │   └── src/  # 源文件
│   ├── VmExtra/  # 可選組件 (網絡協議、JAR 讀取、調試器、文件加載器等)
│   ├── VmUnix/   # Unix 平台相關
│   └── VmWin/    # Windows 平台相關
├── samples/      # 示例程序
└── tools/        # 輔助工具 (JavaCodeCompact, preverify, kdp, palm tool 等)

VmCommon 核心模塊速查表

文件功能
StartJVM.cVM 啟動、命令行解析
bytecodes.c/hBytecode 定義、解釋器核心 (1.0.2 後從 interpret 分離)
cache.c/h內聯緩存,加速方法查找
class.c/h運行時類數據結構、操作
events.c/h事件處理系統
execute.c/h解釋器執行宏、操作
fields.c/h字段運行時結構、類加載時建表
frame.c/h棧幀、異常處理
garbage.c/h, collector.cGC、內存管理
global.c/h全局變量定義
hashtable.c/hVM 內部哈希表
interpret.c/hBytecode 解釋器主循環
loader.c/h類加載器
log.c/h運行時診斷日誌
long.c/h64-bit 運算宏 (彌補 C long 32-bit 不足)
main.c/h編譯選項、預置配置
messages.c/h錯誤/警告信息
native.c/h, nativeCore.cNative 方法接口、核心庫 (不使用 JNI,開銷太大)
pool.c/h常量池管理
profiling.c/h性能分析數據
property.c/hJava 系統屬性獲取
rom.c/hJavaCodeCompact (ROMizer) 所需宏
runtime.c/h平台相關操作原型 (需平台實現 runtime_md.c)
stackmap.cStackmap 支持精確 GC
thread.c/h多線程支持、Java 線程管理
verifier.c/h類文件驗證器

VmExtra 可選組件

  • 異步 I/O 宏 (async.h)
  • 文件系統類加載器 (loaderFile.c)
  • 命令行啟動入口 (main.c)
  • JAR 讀取/解壓 (jar.c, inflate.c)
  • 網絡協議實現:串口、Socket、Datagram (commProtocol.c, socketProtocol.c, datagramProtocol.c)
  • 資源流協議 (resource.c)
  • Java 級調試器 + KDWP 協議 (debugger*.c)
  • 靜態內存模擬 (fakeStaticMemory.c,用於克服 Palm 內存限制)
  • 底層事件處理 (nativeSpotlet.c/h)

移植關鍵點

  1. 在 kvm/ 下創建平台目錄 (如 VmWinCE/),放置 src/、h/、build/。
  2. 實現 runtime.h 聲明的所有平台相關函數 (在 runtime_md.c 中)。
  3. 根據目標平台特性裁剪 VmExtra 組件 (如無文件系統則不含 loaderFile)。
  4. 配置 main.h 編譯選項 (如 USE_STATIC_MEMORY、浮點支持、GC 策略)。
  5. 使用平台編譯器構建,運行 samples/ 驗證。

參考資源

原書 100+ 頁,本筆記提煉核心結構與移植關鍵路徑。完整翻譯版可參考社區共享資源。

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