harmony:进入 Harmony 世界 第 3 部分: Harmony VMI

  作为由 5 个部分组成系列文章第 3部分这篇文章较详细地介绍了 Harmony 项目中虚拟机接口(VMI)

  为什么需要 Harmony 虚拟机接口(VMI)

  Java 规范标准已经定义了些虚拟机 API比如 Java 本地接口(JNI) Java 虚拟机工具接口(JVMTI)等但是 Java 规范标准并没有定义类库和虚拟机的间接口Harmony 为了模块化和可移植性要求定义了虚拟机接口(VMI)VMI 存在使 Harmony Class Lib 和虚拟机分离成为了可能只要实现了该接口虚拟机就可以和 Harmony 类库兼容可以和 Harmony 类库实现互操作并且可以和 Harmony 提供 Java 启动(launcher)协作基于这种设计Harmony 除了实现大量类库代码的外已经有了 J9VMDRLVMStableVM 等等相兼容虚拟机并有了很好运作

  什么是 VMI

  本系列篇“研究 Port Layer”中提到过开发 Java 类库必须编写本地代码以使用操作系统并且介绍了如何利用 Harmony Port Library 开发平台无关本地代码那么如何从 Java 类库中这些本地代码呢?虚拟机接口(Virtual Machine Interface)就是这样道窗户沟通了 Java 世界和本地机器

  Apache Harmony 虚拟机接口分为 3个部分部分是 Java 语言接口由 23 个内核类(Kernel Class)组成部分是 C 语言接口由 10 个组成最后部分就是标准 JNI

  最重要也是最早提出 VMI 就是 Java 1.0 时代就存在 Java 本地接口(Java Native Interface, JNI)JNI 是这样编程标准:它不仅能够将本地内嵌入 Java 过程的中;还能从本地例如由 C 语言编写标准 win32 创建 Java 虚拟机并使用 Java 功能JNI 是强大它使 Java 具有了同本地代码样全面操纵系统能力;它提高了 Java 系统运行效率:如果目前 Java些特定场合执行速度还不能像本机代码那样令人满意话;它使 Java 系统能够继续利用业已存在本地代码库使得遗留系统向 Java 系统迁移不那么痛苦但是 JNI 也有其显著缺点:不再是“100% 纯 Java”了牺牲了代码可移植性——开发人员必须为这些在区别平台上部署进行再测试和再调试

  此后又提出了 JVMPI(Java Virtual Machine Profiler Interface)和 JVMDI(Java Virtual Machine Debug Interface)JVMPI 是居于 Java 虚拟机和记录代理的间接口:Java 虚拟机利用 JVMPI 通知记录代理虚拟机内部事件:如启动线程堆分配等等;而记录代理又可以在回调中控制 Java 虚拟机行为JVMDI 同样是接口和 JVMPI 区别JVMDI 主要是提供调试器以及其他工具个监测以及控制 Java 虚拟机内部状态编程接口这是由于 JVMPI 和 JVMDI 的间相似性随着 Java 5 推出出现了个用来取代上述两者更为统虚拟机接口:JVMTM Tool Interface (JVMTI)JVMTI 功能更为强大不仅局限于 JVMPI 和 JVMDI 所有功能事实上Harmony 项目 instrument 模块就是利用 JVMTI 实现

  Harmony VMI 还包括内核类内核类提出是少数核心公共类是和虚拟机密切相关(VM-specic)它们都是属于 java.lang、java.lang.ref、java.lang.reflect 和 java.security 等几个核心比如说 java.lang.ClassLoader、 java.lang.ref.WeakReference 等随着 Java 版本升级核心类数量也可能会增加Harmony 类库实现为大多数核心类定义了实现模板VM 开发人员可以从零开始实现这些核心类也可以在 Harmony 提供模板基础上开始开发

  Harmony 项目定义了自己虚拟机接口 VMI它和传统虚拟机结构兼容实现了 JNI 和 JVMTI;事实上Harmony VMI 更为强大:VMI 能够提供 Port Layer 支持从而使 JNI 具有跨平台能力;还有另些虚拟机提供者可选接口具有更强扩展性不仅如此Harmony VMI 还是 Harmony 项目核心它联系了项目最主要 3大模块:类库、虚拟机和 Port Layer

  Harmony VMI 特点

  可移植性

  和以往本地代码会引入平台相关性区别Harmony VMI 提供了 Port Library只要人员在本地代码中使用 Port 而不是直接操作系统 API就能保持 Java 项目可移植性点不仅对于 Harmony 类库开发者是重要而且对于 Java 应用员来说Harmony VMI 这个特点使他们能够充分利用 JNI/JNTI 强大力量而不必担心要在区别平台上调试同所带来麻烦至于 Harmony 项目利用 Port Library 屏蔽平台差异性过程在本系列篇中我们已经详细描述了这里不再赘述

  模块化

  Harmony 项目从开始就把模块化作为设计主要目标的组件的间依赖存在于接口的间而不是模块实现的间只要是个符合 Java Class File Format 类文件就能运行在各个 Java 虚拟机上;所有本地代码只要其符合 VMI 规范标准就能获得各个 Java 虚拟机支持;而区别 Port Layer 实现只要实现 struct HyPortLibrary 定义各个虚就能满足所有本地代码系统希望能够将 A 组织提供类库运行在 B 厂商 Java 虚拟机上而本地代码又是通过 C 个人实现 Port Library 进行事实上Harmony 类库已经能够运行在 IBM J9 虚拟机或者 DRLVM 虚拟机上Harmony Port Library 也有潜在候选者

,f_port);

Tags:  inharmony harmonyengine sweetharmony harmony

延伸阅读

最新评论

发表评论