站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题64位背景介绍

64位背景介绍

摘要: 64位背景介绍

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版本中体积更大,导致垃圾回收动作更频繁,从而降低了程序性能。

<table width="90%" align=center border=0><tr><td>


图1</td></tr></table>
<table width="90%" align=center border=0><tr><td>
图2</td></tr></table>
  图3与图4显示了在AMD64平台上,Linux版本的IBM Developer Kit for Linux、Java 2 Technology Edition Version 1.4.2 GA在SPECjvm98和SPECjbb2000中32位与64位的性能测试结果。其中,基准测试程序中有三项--_209_db、_213_javac、_228_jack,在64位环境下表现出了更佳的性能。另外,在SPECjbb2000测试中,当面对三个不同大小的测试堆时,64位IBM版本的JVM都没有表现出比32位版本更好的性能。

<table width="90%" align=center border=0><tr><td>
图3</td></tr></table>
<table width="90%" align=center border=0><tr><td>
图4</td></tr></table>
  图5与图6显示了在PowerPC64平台上,IBM Developer Kit for Linux,Java 2 Technology Edition Version 1.4.2 GA在SPECjvm98和SPECjbb2000中32位与64位的性能测试结果。此处,在所有SPECjvm98和SPECjbb2000的测试中,64位JVM的性能都不及32位平台。

<table width="90%" align=center border=0><tr><td>
图5</td></tr></table>
<table width="90%" align=center border=0><tr><td>
图6</td></tr></table>
  结论

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

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

  有几件事情需重点注意,第一,尽管SPECjvm98与SPECjbb2000都是工业标准的基准测试程序,但它们的测试范围有限,因此,就测试结果而言,只对一部分的Java程序正确,而不是所有;第二,随着64位计算越来越被人们接受,我们期待64位程序会有所改进,包括64位JVM--也许其在将来会大幅提高性能;第三,此处只组合测试了几种特定的硬件平台、操作系统与JVM,因此,如果要进一步地说明问题,恐怕只有在64位Windows XP/2003,及64位Mac OS X上的进行JVM基准测试了。
↑返回目录
前一篇: Java初学者都必须理解的六大问题
后一篇: 七剑与java开源工具