java

位置:IT落伍者 >> java >> 浏览文章

64位计算中的Java虚拟机(JVM)性能测试


发布日期:2023年09月26日
 
64位计算中的Java虚拟机(JVM)性能测试

随着DEC(Digital Equipment Corp)公司Alpha处理器在年末的发布就意味着这个世界开始进入位计算的时代紧接着全球几大主要计算机公司如IBMHewlettPackard(惠普)Fujitsu(富士通)Sun Microsystems也发布了各自相应的产品进入到 这个市场Fujitsu旗下的HAL Computer发布了业界第一台基于位SPARC CPU的工作站SPARC此后不久Sun发布了大众期盼已久的Ultra Ultra 工作站其内置了Sun的位UltraSPARC处理器时间转换到IBM发布了其第一个位PowerPC RISC芯片RSIBM对RS进行改良使其支持SMP这就是Power 如今看起来位计算来说其整整花了五年的时间才在年开始大量进入市场

在本文中将主要涉及两个现在广泛应用的位平台AMD与PowerPC并分别使用IBM与Sun Microsystems这两个Java语言巨头提供的Java虚拟机(JVM)通过SPECjvm与SPECjbb的测试来评价位与位中JVM的性能(注SPECjvm与SPECjbb来自Standard Performance Evaluation Corp )

AMD是Advanced Micro Devices(AMD)公司的位平台其扩展了工业标准的x指令集架构并设计在不降低任何性能的前提下位模式中完全兼容现有的x应用程序与操作系统AMD发布了Opteron遵循AMD架构的第一款处理器

与其同时IBM发布了PowerPC 其是源自IBM Power 双核CPU的单核处理器从此IBM把位PowerPC架构带到了桌面系统与低端服务器领域另外要说明一点PowerPC 也像Power 一样可在不降低性能的前提下本地执行位指令不久之后由Apple Computer公司设计基于PowerPC CPU的Power Mac G电脑上市

Java背景介绍

在第一款位处理器诞生不久Java技术也出世了并由此改写历史Java是一种健壮的通用的面向对象的构架中立的可移植的安全的多线程的编程语言并带有隐式内存管理功能Java面向对象的特性在很大程度上与C++相似但加入了更多的接口与扩展以创建更具灵活性的解决方案与C++不同的是Java不支持操作符重载多重继承和自动类型强制Java通过广泛的运行时检查和内置的例外处理机制达到健壮性的目的编译器所生成的只是字节码指令其是独立于任何特定平台的这样就保证了架构中立性可移植性是通过指定基本数据类型大小和其算术操作符的行为来达到的例如int总表示一个有符号的位整数而float总表示一个位的IEEE 浮点数Java同时也有一系列的同步原语其基于广泛使用的条件变量范式自动内存垃圾回收(GC)简化了Java编程的难度并极大地降低了bug的数目但也使运行机制稍微复杂了点

也就是DEC公司发布第一款位处理器的前一年Sun Microsystems开始了一个名为the Green Project的计划目的是要抢占下一波计算的先机并为此提前做好准备计划得出的最初结论是移动数字设备与计算机的融合将会很快出现年的夏天计划小组演示了*(星一个通过动画式触摸屏控制的交互性手持娱乐设备通过使用Oak一种全新的编程语言这个设备可控制很多不同的平台而由James Gosling开发的Oak其最主要的特点在于它是一个彻底独立于处理器的语言在往后的几年中这种语言被用于Internet之后成为大众所知的JavaOak这个名字则因为版权问题从此消失了

Sun正式宣布Java的诞生这是一种程序员只需编写一次但却可在多种操作系统及多种硬件平台上运行的语言编写一次随处运行Sun发布了Java开发工具包(JDK 其后不久个主要的操作系统开发商宣布支持Java技术当中也包括Microsoft其以每年大约万美元取得五年时间的Java许可协议Sun发布了Java平台的第一个即时(JIT)编译器JDK 面世在随后的三周时间里达到了万次的下载量到了年初这个数字达到两百万

年末Java 平台发布了大概半年后也就是年年中Sun发布了三个版本的Java平台JME(Java Micro Edition)应用于移动无线及有限资源的环境JSE(Java Standard Edition)应用于桌面环境JEE(Java Enterprise Edition)应用于基于Java的应用服务器此后广泛应用的Java技术出现了一些framework如Enterprise JavaBeans (EJB)和JavaServer Pages (JSP)Java技术的随后一次升级是出现在月的JSE 几周后其获得了Apple公司Mac OS X的工业标准的支持

JSE 发布于月份对Java平台来说这是一个几乎全新的产品与JSE 相比其多了近%的类和接口在这些新特性当中还提供了广泛的XML支持安全套接字支持(通过SSL与TLS协议)全新的I/O API正则表达式日志与断言

是Java最近的一次发布JSE (内部版本号代号Tiger现已提供公开下载Tiger包含了从年发布版本以来的最重大的更新其中包括泛型支持基本类型的自动装箱改进的循环枚举类型格式化I/O及可变参数

Java虚拟机(JVM)是一个软件规范相关软件有责任遵守它以运行编译为Java字节码的程序JVM是一个抽象的计算机制并独立于操作系统具有编译后的程序体积小可防止执行恶意代码等特点其没有预先假设基于任何特定的实现技术不管是硬件还是操作系统通常我们有几个常用的JVM软件位与位版本性能有所不同但它们都包括JIT编译器和垃圾回收功能(GC)

JIT编译器从JDK 开始就是JVM的一部分了当时Java只是用于浏览器客户端动态效果显示的一种技术JIT编译器实现了程序执行之前Java字节码到硬件机器码的动态翻译其背后的思想在于相比Java源代码字节码更小也更容易编译但付出的代价是需要在Java字节码编译为机器码时花上一点时间但与直接把Java源代码编译为机器码相比时间还是少得多的位与位的JVM中相应的JIT在把Java字节码编译为最终的机器码时所花的时间稍微有所不同但还能进行一些优化另外在IBM与Sun这两个版本的客户端与服务端程序上总体性能也会有所不同

垃圾回收是一种自动内存管理系统它会收回对象不再需要使用的内存从软件工程的角度来看垃圾回收最大的一个好处就是程序员不用再操心那些低级的内存管理细节了同时垃圾回收也去除了源代码中两个最大的bug内存未释放(内存洩漏)与过早释放(指针崩溃)内存回收在Java程序运行期间占了一个很重要的部分因为它必须被经常执行以释放对象不再访问的Java堆由于在位与位平台上Java堆中的数据大小会有所变化所以会因为位与位JVM的性能差异导致相应垃圾回收的性能也会有所不同

位背景介绍

位计算有几个重要组成部分第一就是位寻址实际上位寻址是通过位整数寄存器达到的(或RISC中所指的通用寄存器)位寄存器允许位的指针装入到单个的寄存器中位的指针才是可以寻址访问更大内存的实质所在位处理器只能访问到字节或GB内存时位处理器理论上却可寻址访问字节或×GB内存在现代的位系统中可寻址的内存的实际限制通常比理论值低一点具体依赖于特定的硬件架构和操作系统举例来说在基于Linux的操作系统中受限于当前Linux内核数据结构的设计可寻址的内存最多为字节或GB

位计算的第二个重要方面就是位整数运算要提醒的是这可不是简单地因为有了可存储更多更大整数量更宽的位整数寄存器而带来的必然结果其最直接的影响就是对那些需要处理密集大数值整数运算的程序而言可带来性能上的飞跃

第三个方面位计算的特性位操作系统与程序的应用相关的软件必须全面支持硬件的位特性包括位寻址和运算通常还有一些附带的好处可操作更多更大的文件管理更大的磁盘等等

位计算所带来的影响目前已在许多程序中得到了体现数据库服务器现在可寻址更大的内存以维持更大的缓沖池数据缓存或在内存中进行排序以减少相关的I/O操作也能给每个用户分配更多的内存支持更多的用户或对更大的数据文件进行操作仿真或其他计算密集的程序也将从中受益现在可以在内存中分配更大的数组了最后别忘了还有大量的Java程序JEE应用服务器现在也能充分享受到位计算所带来的好处了

位计算的主要缺点是与它们位的兄弟相比位二进制文件一般都更大因此最终生成的机器码体积也更大在系统缓存与旁路转换缓存(TLB)大小不变的情况下可能会同时降低两者的命中率这就是说在一定程度上性能会有所损失

性能评测

此处用于测试位与位JVM性能的系统是两台位双CPU工作站一台是基于AMD技术的Opteron系统而另一台是基于PowerPC的Apple Power Mac G两台工作站都分别运行基于Linux的位操作系统受测试的JVM分别来自于IBM和Sun将使用SPEC的SPECjvm和SPECjbb来测试相应JVM的性能其中SPECjvm使用了以下项目测试客户端性能

·__compress一个流行的压缩程序

·__jess一个Java版的NASA CLIPS基于规则的专家系统

·__db数据管理基准测试软件

·__javacJDK Java编译器

·__mpegaudio一个MPEG音频解码器

·__mtrt一个对图像文件进行处理的双线程程序

·__jack一个分析程序生成器

SPECjbb(Java商业基准程序)是一个用于服务端的基准测试程序其模仿了三层体系结构是一个通用类型的Java服务端应用程序

通过运行SPECjvm以秒为单位记录了每个基准测试的运行时长时间越短越好所有SPECjvm测试的堆大小因JVM而有所变化从最小值MB至最大值MB在SPECjbb测试中记录了在三种不同堆大小时的每秒执行操作数更高的值代表更高的性能每一个测试程序都运行三次取成绩最好的一次作为最后的结果

与图显示了在AMD平台上Linux版本的Sun Java Standard Edition Development Kit (JSE )在SPECjvm和SPECjbb位与位的性能测试结果在SPECjvm测试中只有三项__compress__mpegaudio __jack位版本的JVM上比位表现出更佳的性能在SPECjbb位版本的性能只在有足够堆大小的情况下才表现出更高的性能其中在堆大小为MB时因为某些活动数据在位JVM版本中体积更大导致垃圾回收动作更频繁从而降低了程序性能

与图显示了在AMD平台上Linux版本的IBM Developer Kit for LinuxJava Technology Edition Version GA在SPECjvm和SPECjbb位与位的性能测试结果其中基准测试程序中有三项__db__javac__jack位环境下表现出了更佳的性能另外在SPECjbb测试中当面对三个不同大小的测试堆时位IBM版本的JVM都没有表现出比位版本更好的性能

与图显示了在PowerPC平台上IBM Developer Kit for LinuxJava Technology Edition Version GA在SPECjvm和SPECjbb位与位的性能测试结果此处在所有SPECjvm和SPECjbb的测试中位JVM的性能都不及位平台

结论

基于运行Linux操作系统的PowerPC平台的测试结果表明如果在此平台上使用IBM的JVM那么那些不需要位特性的程序还是让它们运行在位JVM中吧因为在此平台的所有测试结果中位JVM的性能都比位平台低

而基于运行Linux操作系统的AMD平台的测试结果表明不管是Sun还是IBM的JVM位与位的性能都在伯仲之间要注意的是性能的差异是依赖于具体的应用程序与JVM的如果需要最佳性能就必须在某个特定的执行环境中测试某个特定的程序以评价转换到位所带来的潜在性能提升

有几件事情需重点注意第一尽管SPECjvm与SPECjbb都是工业标准的基准测试程序但它们的测试范围有限因此就测试结果而言只对一部分的Java程序正确而不是所有第二随着位计算越来越被人们接受我们期待位程序会有所改进包括位JVM也许其在将来会大幅提高性能第三此处只组合测试了几种特定的硬件平台操作系统与JVM因此如果要进一步地说明问题恐怕只有在位Windows XP/位Mac OS X上的进行JVM基准测试了

上一篇:java 并发包 多线程 工具类 笔记

下一篇:Java中实现基于Aspectwerkz的AOP开发