IBM Support

IBM i 上Java 虚拟机简介

Technical Blog Post


Abstract

IBM i 上Java 虚拟机简介

Body

 JavaIT业界有多流行?google上搜索一下java, 结果一目了然(今天早上我搜索到的记录数是840000000条)。Java之所以能广泛的被应用,与它“一次编译,处处运行”,也就是跨平台性是密不可分的。JVMJava的跨平台性实现的基础,不同平台上标准统一的JVM提供相同虚拟运行环境,使得Java应用不用做(或很小的)修改在各个JVM上都能运行。IBM Technology for Java Virtual MachineIBM自己开发的一款JVM,它支持在当前流行的大部分平台上的装和使用,这其中就包括IBM i。本文将对这款虚拟机以及它IBM i上的支持简单进行介绍。

子曰:名不正则言不顺。虽然孔圣人的这个“名”不是名字的名,这里还是要借用一下,先让我们把要介绍的这个JVM的名字说清楚。除去IBM Technology for Java Virtual Machine,在一些文档中,也许你还读到过这些名称:IBM Virtual Machine for Java, IBM JVMIBM J9 VM, J9 JVM, 以及IT4J。其实这些名称指的都是本文要介绍的这款JVM(为了方便,下文中我统一使用J9 VM),而这不同的名称中,J9显得更特别一点。为什么会J9这个名字呢?这与这款JVM的出身有关,它最早是由IBM Ottawa实验室一个Small Talk的虚拟机扩展来的。那时候,这个虚拟机有一个bug是因为8k值定义错误引起,工程师们花了很长时间终于发现并解决了这个错误,此后这个版本的虚拟机就被称为K8了。于是,后来出现的支持Java这个版本的虚拟机就被称为J9了。

为实现JVM定义的功能(JVM的功能和定义,请参考相关资料),并提供自己的独特性,J9 VM主要由以下几部分组成,如图1

图像








                    

                              

                                       图1. J9 VM的组成


  • JVM API: 外部应用与JVM交互和调用的接口;

  • GC: 又被称为Memory Management,是JVM内存管理模块;

  • Class Loader: 支持Java语言动态装载code的模块;

  • Interpreter: JVM的解释执行器;

  • Diagnostics: 提供JVM Reliability, Availability, Serviceability (RAS)特性;

  • Platform port layer: 这个模块提供支持,使得JVM在各种不同系统平台上的运行。




良好的设计让J9 VM具有高可配置性和可扩展性,IBM把它用在各个版本各种平台的JDK中,IBM i就是J9 VM支持众多平台中的一个。IBM iJ9 VM引入前就早已开始支持Java。早在1998年,IBM I V4R2就提供了i平台自己的JVM, 这款JVM被称为Classic JVM, 通过它Java程序能够在IBM i上直接运行(在这之前,一款称为Java toolbox的产品,已经让其他平台上运行的Java应用可以访问IBM i系统的资源,如数据文件,可运行程序等)。J9 VM的引入是在IBM I V5R4版本之后,是通过IBM iPortable Application Solution Environment(PASE)环境实现的。与Classic JVM只支持64位地址访问不同,J9 Vm有两种不同版本32位和64位(V5R4上只有32位版本,V6R1之后开始支持64位版本)。J9VM引入后,IBM i逐渐取消了对Classic JVM的支持(从IBM I V7R1开始,Classic JVM已经不再支持)。虽然Classic JVM不再被支持,但用户已有的Java应用仍然可用,因为总得来说运行在Classic JVM上的应用也都可以在J9 Vm上运行。在IBM i上,之所以用J9 Vm取代Classic JVM, 主要有以下几个因素:

a.J9 Vm在性能上更优于Classic JVM, 特别对于中小型应用J9 VM提供的32位的版本在空间占用和性能上相对Classic有很大改进;

b. J9 VmIBM多个平台共用的, 缺陷的修改和新技术的应用在J9 Vm上能及时的获得支持,而Classic JVM作为IBM i独有的JVM需要单独的投入才能保证及时的更新;

Note:具体J9 VMClassic JVM有那些不同,为什么一定要引入J9 Vm会有后续 文章介绍。

IBM iPASE环境与AIX类似,J9 VMIBM i Shell环境下的使用与AIX中也类似。下面的事例是一个简单使用J9 VM的过程:

Step1. 通过QSH命令进入shell环境;

Step2. 通过环境变量JAVA_HOME来设置要使用的JDK版本,假设我们使用JDK60 32bit:

      export JAVA_HOME=/QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit

      Note:注意大小写,/QOpenSys下大小写敏感

Step3. JDK发布会有一个QIBMHello类,执行这个类会在控制台输出QIBMHello几个字符;通过执行它 就可以验证JDK是否安装正确,运行命令: java QIBMHello;

关于J9 VmIBM i Shell环境中使用和支持的详细资料,以及IBM i ILE环境中的支持,请参考IBM i infocenter.




参考资料:

  1. IBM i infocenter:

    http://publib.boulder.ibm.com/infocenter/iseries/v6r1m0/index.jsp

  2. Java Diagnostic Guild 6 for IBM JDK:

    http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/topic/com.ibm.java.doc.diagnostics.60/diag/welcome.html

  3. IBM JVM in IBM i5/os 红皮书:

    http://www.redbooks.ibm.com/abstracts/sg247353.html

  4. JVM Specification:

    http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html

[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SWG60","label":"IBM i"},"Component":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"","Edition":"","Line of Business":{"code":"LOB57","label":"Power"}}]

UID

ibm11146190