在本文中,将主要涉及两个现在广泛应用的64位平台--AMD64与PowerPC64,并分别使用IBM与Sun Microsystems这两个Java语言巨头提供的Java虚拟机(JVM),通过SPECjvm98与SPECjbb2000的测试,来评价32位与64位中JVM的性能。
作者:中国IT实验室 来源:中国IT实验室 2007年8月24日
关键字:
64位背景介绍
64位计算有几个重要组成部分,第一就是64位寻址;实际上,64位寻址是通过64位整数寄存器达到的(或RISC中所指的通用寄存器)。64位寄存器允许64位的指针装入到单个的寄存器中,而64位的指针,才是可以寻址访问更大内存的实质所在。当32位处理器只能访问到232字节或4GB内存时,64位处理器理论上却可寻址访问264字节或18×109GB内存。在现代的64位系统中,可寻址的内存的实际限制通常比理论值低一点,具体依赖于特定的硬件架构和操作系统,举例来说,在基于Linux的操作系统中,受限于当前Linux内核数据结构的设计,可寻址的内存最多为242字节或4096GB。
64位计算的第二个重要方面,就是64位整数运算。要提醒的是,这可不是简单地因为有了可存储更多更大整数量、更宽的64位整数寄存器而带来的必然结果;其最直接的影响就是对那些需要处理密集大数值整数运算的程序而言,可带来性能上的飞跃。
第三个方面--即64位计算的特性,是64位操作系统与程序的应用;相关的软件必须全面支持硬件的64位特性,包括64位寻址和运算。通常还有一些附带的好处,如,可操作更多更大的文件、管理更大的磁盘等等。
64位计算所带来的影响,目前已在许多程序中得到了体现,数据库服务器现在可寻址更大的内存,以维持更大的缓冲池、数据缓存、或在内存中进行排序以减少相关的I/O操作;也能给每个用户分配更多的内存、支持更多的用户、或对更大的数据文件进行操作;仿真或其他计算密集的程序也将从中受益,如,现在可以在内存中分配更大的数组了。最后,别忘了还有大量的Java程序--J2EE应用服务器--现在也能充分享受到64位计算所带来的好处了。
64位计算的主要缺点是,与它们32位的兄弟相比,64位二进制文件一般都更大,因此,最终生成的机器码体积也更大,在系统缓存与旁路转换缓存(TLB)大小不变的情况下,可能会同时降低两者的命中率,这就是说,在一定程度上性能会有所损失。
性能评测
此处用于测试32位与64位JVM性能的系统,是两台64位双CPU工作站,一台是基于AMD64技术的Opteron系统,而另一台是基于PowerPC64的Apple Power Mac G5,两台工作站都分别运行基于Linux的64位操作系统;受测试的JVM分别来自于IBM和Sun。将使用SPEC的SPECjvm98和SPECjbb2000来测试相应JVM的性能,其中SPECjvm98使用了以下项目测试客户端性能。
·_201_compress,一个流行的压缩程序。
·_202_jess,一个Java版的NASA CLIPS基于规则的专家系统。
·_209_db,数据管理基准测试软件。
·_213_javac,JDK Java编译器。
·_222_mpegaudio,一个MPEG-3音频解码器。
·_227_mtrt,一个对图像文件进行处理的双线程程序。
·_228_jack,一个分析程序生成器。
SPECjbb2000(Java商业基准程序)是一个用于服务端的基准测试程序,其模仿了三层体系结构,是一个通用类型的Java服务端应用程序。
通过运行SPECjvm98,以秒为单位记录了每个基准测试的运行时长,时间越短越好。所有SPECjvm98测试的堆大小因JVM而有所变化,从最小值16MB至最大值32MB。在SPECjbb2000测试中,记录了在三种不同堆大小时的每秒执行操作数,更高的值代表更高的性能。每一个测试程序都运行三次,取成绩最好的一次作为最后的结果。
图1与图2显示了在AMD64平台上,Linux版本的Sun Java 2 Standard Edition Development Kit 5.0 (J2SE 1.5.0)在SPECjvm98和SPECjbb2000中32位与64位的性能测试结果,在SPECjvm98测试中,只有三项--_201_compress、_222_mpegaudio、 _228_jack,在64位版本的JVM上比32位表现出更佳的性能。在SPECjbb2000中,64位版本的性能只在有足够堆大小的情况下,才表现出更高的性能,其中在堆大小为256MB时,因为某些活动数据在64位JVM版本中体积更大,导致垃圾回收动作更频繁,从而降低了程序性能。