J2ME 编程/MIDP 中的 JVM
本文介绍了针对 J2ME 平台的 MIDP 设备系列中 Java 虚拟机 的演变。J2ME 开发人员会发现此信息有助于确定其特定的目标设备是否支持设备上仿真以及在移动设备上进行应用程序开发所需的其它有用信息。
1999 年,Sun Microsystems 推出了用于 CLDC/MIDP 设备的 K 虚拟机。摩托罗拉在 1999 年的 JavaOne 大会上展示了几款不同的设备,例如运行 KVM 的寻呼机("走上街头". 走上街头:摩托罗拉和 K 机器.)。
随着 Sun Microsystems 工程师着手解决优化 Java 虚拟机的问题,他们提出了 Java 平台调试器架构("JPDA". Java 平台调试器架构主页.)作为完整的调试基础设施,以帮助 Java 开发人员使用 JVM 本身来提供调试功能,在运行模式操作中调试 Java 应用程序。
由于移动设备的内存大小占用很小,很明显,完整的 JPDA 无法在移动设备的 JVM 中实现。因此,JPDA 的最低部分,Java 调试线协议(JDWP)在 KVM 上被实现为 KVM 调试线协议(KDWP)。通常,在 J2SE 平台中,您将使用 IDE 将其 JVM 连接到应用程序 JVM 以收集从应用程序 JVM 发送的 JDWP 数据。在移动 J2ME 开发环境中,您将使用 Sun 的 WTK 设备上调试实现或 OEM 供应商的模拟器来代替 IDE JVM,通过 KDWP 通道从移动设备 KVM 收集数据。
罗切斯特理工学院的教师(Jim Vallino 和 Hans-Peter Bischof)以及学生(Jon Coles、Zakir Mahomedy、Brian Koponen、Jeff Myers、John Mikucki、Aaron Deitrich)研究了更完整的移动 JDPA("KVMDB 项目". 在 Palm 平台上调试 Java 程序.),这为 Sun Microsystems 在 2001 年为 KVM 推出的 KDPA 产品做出了贡献("Tasneem Sayeed - JavaOne 幻灯片" (PDF). 深入了解新特性的 K 虚拟机 (KVM) 技术概述.)。
随着 J2SE 1.3.x 的发布,Sun Microsystems 向 Java 开发人员社区推出了 Java HotSpot Java 虚拟机技术。2001 年,将 HotSpot 优化 JVM 技术引入 CLDC/MIDP 设备(称为 Monty)("CLDC HI 白皮书" (PDF). CLDC HotSpot 实现虚拟机.)。2004 年推出了用于 CDC/J2ME 平台设备的 HotSpot Java 虚拟机。
KVM1.0 及更高版本基于 Spotless 非优化 JVM 架构("Spotless". Spotless 系统主页.)。所有 KVM 都有 KVM 平台调试架构,调试由 Sun Microsystems WTK 或供应商 OEM 模拟器/仿真器中的调试代理(也称为调试代理)来促进,以将调试数据和内存密集型调试操作与 IDE JVM 中发生的操作连接起来("Tasneem Sayeed - JavaOne 幻灯片" (PDF). 深入了解新特性的 K 虚拟机 (KVM) 技术概述.)。
即使有这两个部分,移动设备上的 KDWP 部分也必须在首次编译和部署到该设备的 KVM 时启用编译器开启。一些 OEM 供应商由于在设备系列上自己的 KVM 实现中面临的内存/速度限制而没有启用此功能。通常,与台式机上的 JDK 1.1.x 相比,KVM 的性能为 30% 到 80%。
- 没有 Just-In-Time 编译技术的 JDK 1.1.x 台式机速度性能的 30% 到 80%
- 用 C 语言实现
- 小型内存占用大小为 60-72kb
- 平台无关的绿色线程
- 移植到 Linux、Windows、Solaris 和 Windows CE
- 基本字节码解释器
- 基于现有的 JDWP(Java 调试线协议)
- 内存密集型操作移至台式机工作站上的调试代理(也称为调试代理)
- KVM 实现 JDPW 命令集的子集(KDWP)
移动和台式机实现中的 HotSpot 一词都指的是使用自适应编译器,仅将字节码编译为频繁使用的方法(热点)的本地指令。不常用的方法使用优化的解释器进行解释。这比 KVM 字节码解释器将性能提高了 5 到 7 倍。
由于超过 90% 的 MIDP 设备使用 ARM 处理器系列,因此 CLDC HotSpot VM 实现使用三种方法来优化 ARM 处理器,被称为 Thumb 模式支持。
- VM 可以编译为 16 位 Thumb 机器代码
- 动态自适应编译器可以配置为生成 16 位 Thumb 机器代码
- 优化的解释器使用 32 位 ARM 指令集实现
与 KVM 相比,另一个新功能是多任务选项,可以在移动设备上的一个 JVM 中运行多个线程和 MIDLet。这些新的多任务功能在不依赖底层操作系统的基础上实现。
此虚拟机实现还实现了首先在 KVM 中引入的符合 JDPA 的技术,称为 KDWP。它是通过编译 CLDC-HI VM 并将其部署到移动设备来实现的。并非每个 OEM 供应商都在其使用的特定处理器和移动硬件上对 CLDC-HI VM 进行了足够的优化,因此一些具有 MIDP2.0 的移动设备禁用了此功能。
- "走上街头". 走上街头:摩托罗拉和 K 机器.(http://java.sun.com/features/1999/06/moto.html)
- "JPDA". Java 平台调试器架构主页.(http://java.sun.com/products/jpda/)
- "KVMDB 项目". 调试 Palm 平台上的 Java 程序.(http://www.se.rit.edu/~jrv/research/KVMDB_Project.html)
- "Tasneem Sayeed - JavaOne 幻灯片" (PDF). K 虚拟机 (KVM) 的技术概述,深入探讨新功能.(http://www.eos.dk/web/jaooslides/session_TasneemSayeed.pdf)
- "CLDC HI 白皮书" (PDF). CLDC HotSpot 实现虚拟机.(http://java.sun.com/j2me/docs/pdf/CLDC-HI_whitepaper-February_2005.pdf)
- "Spotless". Spotless 系统主页.(http://research.sun.com/spotless/)
J2ME、Java 和所有基于 Java 的标志是 Sun Microsystems, Inc. 在美国和其他国家/地区的商标或注册商标。