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

http://www.dotrade.cn


在本文中,将主要涉及两个现在广泛应用的64位平台--AMD64与PowerPC64,并分别使用IBM与Sun Microsystems这两个Java语言巨头提供的Java虚拟机(JVM),通过SPECjvm98与SPECjbb2000的测试,来评价32位与64位中JVM的性能。(注:SPECjvm98与SPECjbb2000来自Standard Performance Evaluation Corp http://www.spec.org/)

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

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

  Java背景介绍

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

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

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

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

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

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

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

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

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

http://www.dotrade.cn