Technical Blog Post
Abstract
IBM i 上Java 虚拟机简介
Body
Java在IT业界有多流行?google上搜索一下java, 结果一目了然(今天早上我搜索到的记录数是840000000条)。Java之所以能广泛的被应用,与它“一次编译,处处运行”,也就是跨平台性是密不可分的。JVM是Java的跨平台性实现的基础,不同平台上标准统一的JVM提供了相同虚拟运行环境,使得Java应用不用做(或很小的)修改在各个JVM上都能运行。IBM Technology for Java Virtual Machine是IBM自己开发的一款JVM,它支持在当前流行的大部分平台上的安装和使用,这其中就包括IBM i。本文将对这款虚拟机以及它IBM i上的支持简单进行介绍。
子曰:名不正则言不顺。虽然孔圣人的这个“名”不是名字的名,这里还是要借用一下,先让我们把要介绍的这个JVM的名字说清楚。除去IBM Technology for Java Virtual Machine,在一些文档中,也许你还读到过这些名称:IBM Virtual Machine for Java, IBM JVM,IBM 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
i在J9
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
i的Portable
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 Vm是IBM多个平台共用的,
缺陷的修改和新技术的应用在J9
Vm上能及时的获得支持,而Classic
JVM作为IBM
i独有的JVM需要单独的投入才能保证及时的更新;
Note:具体J9 VM和Classic JVM有那些不同,为什么一定要引入J9 Vm会有后续 文章介绍。
IBM i的PASE环境与AIX类似,J9 VM在IBM 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 Vm在IBM i Shell环境中使用和支持的详细资料,以及IBM i ILE环境中的支持,请参考IBM i infocenter.
参考资料:
IBM i infocenter:
http://publib.boulder.ibm.com/infocenter/iseries/v6r1m0/index.jsp
Java Diagnostic Guild 6 for IBM JDK:
IBM JVM in IBM i5/os 红皮书:
JVM Specification:
http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html
UID
ibm11146190