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

Posted

篇首语:生活中若没有朋友,就像生活中没有阳光一样。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 64位计算中的Java虚拟机(JVM)性能测试相关的知识,希望对你有一定的参考价值。

64位计算中的Java虚拟机(JVM)性能测试  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  随着DEC(Digital Equipment Corp)公司Alpha处理器在 年末的发布 就意味着这个世界开始进入 位计算的时代 紧接着 全球几大主要计算机公司 如IBM Hewlett Packard(惠普) Fujitsu(富士通) Sun Microsystems 也发布了各自相应的产品进入到 位 这个市场 在 年 Fujitsu旗下的HAL Computer发布了业界第一台基于 位SPARC CPU的工作站 SPARC 此后不久 Sun发布了大众期盼已久的Ultra Ultra 工作站 其内置了Sun的 位UltraSPARC处理器 时间转换到 年 IBM发布了其第一个 位PowerPC RISC芯片 RS 在 年 IBM对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 之后成为大众所知的Java 而 Oak 这个名字则因为版权问题从此消失了   在 年 月 Sun正式宣布Java的诞生 这是一种程序员只需编写一次 但却可在多种操作系统及多种硬件平台上运行的语言 编写一次 随处运行 在 年 Sun发布了Java开发工具包(JDK ) 其后不久 个主要的操作系统开发商宣布支持Java技术 当中也包括Microsoft 其以每年大约 万美元取得五年时间的Java许可协议 在 年 月 Sun发布了Java平台的第一个即时(JIT)编译器 在 年 月 JDK 面世 在随后的三周时间里 达到了 万次的下载量 到了 年初 这个数字达到两百万   在 年末 Java 平台发布了 大概半年后 也就是 年年中 Sun发布了三个版本的Java平台 J ME(Java Micro Edition) 应用于移动 无线及有限资源的环境 J SE(Java Standard Edition) 应用于桌面环境 J EE(Java Enterprise Edition) 应用于基于Java的应用服务器 此后 广泛应用的Java技术出现了一些framework 如Enterprise JavaBeans (EJB)和JavaServer Pages (JSP) Java技术的随后一次升级 是出现在 年 月的J SE 几周后 其获得了Apple公司Mac OS X的工业标准的支持   J SE 发布于 年 月份 对Java平台来说 这是一个几乎全新的产品 与J SE 相比 其多了近 %的类和接口 在这些新特性当中 还提供了广泛的XML支持 安全套接字支持(通过SSL与TLS协议) 全新的I/O API 正则表达式 日志与断言   在 年 月 是Java最近的一次发布 J SE (内部版本号 ) 代号 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程序 J EE应用服务器 现在也能充分享受到 位计算所带来的好处了    位计算的主要缺点是 与它们 位的兄弟相比 位二进制文件一般都更大 因此 最终生成的机器码体积也更大 在系统缓存与旁路转换缓存(TLB)大小不变的情况下 可能会同时降低两者的命中率 这就是说 在一定程度上性能会有所损失   性能评测  此处用于测试 位与 位JVM性能的系统 是两台 位双CPU工作站 一台是基于AMD 技术的Opteron系统 而另一台是基于PowerPC 的Apple Power Mac G 两台工作站都分别运行基于Linux的 位操作系统 受测试的JVM分别来自于IBM和Sun 将使用SPEC的SPECjvm 和SPECjbb 来测试相应JVM的性能 其中SPECjvm 使用了以下项目测试客户端性能   ·_ _press 一个流行的压缩程序   ·_ _jess 一个Java版的NASA CLIPS基于规则的专家系统   ·_ _db 数据管理基准测试软件   ·_ _javac JDK Java编译器   ·_ _mpegaudio 一个MPEG 音频解码器   ·_ _mtrt 一个对图像文件进行处理的双线程程序   ·_ _jack 一个分析程序生成器   SPECjbb (Java商业基准程序)是一个用于服务端的基准测试程序 其模仿了三层体系结构 是一个通用类型的Java服务端应用程序   通过运行SPECjvm 以秒为单位记录了每个基准测试的运行时长 时间越短越好 所有SPECjvm 测试的堆大小因JVM而有所变化 从最小值 MB至最大值 MB 在SPECjbb 测试中 记录了在三种不同堆大小时的每秒执行操作数 更高的值代表更高的性能 每一个测试程序都运行三次 取成绩最好的一次作为最后的结果   图 与图 显示了在AMD 平台上 Linux版本的Sun Java Standard Edition Development Kit (J SE )在SPECjvm 和SPECjbb 中 位与 位的性能测试结果 在SPECjvm 测试中 只有三项 _ _press _ _mpegaudio _ _jack 在 位版本的JVM上比 位表现出更佳的性能 在SPECjbb 中 位版本的性能只在有足够堆大小的情况下 才表现出更高的性能 其中在堆大小为 MB时 因为某些活动数据在 位JVM版本中体积更大 导致垃圾回收动作更频繁 从而降低了程序性能

  

图 图   图 与图 显示了在AMD 平台上 Linux版本的IBM Developer Kit for Linux Java Technology Edition Version GA在SPECjvm 和SPECjbb 中 位与 位的性能测试结果 其中 基准测试程序中有三项 _ _db _ _javac _ _jack 在 位环境下表现出了更佳的性能 另外 在SPECjbb 测试中 当面对三个不同大小的测试堆时 位IBM版本的JVM都没有表现出比 位版本更好的性能 图 图   图 与图 显示了在PowerPC 平台上 IBM Developer Kit for Linux Java 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基准测试了 cha138/Article/program/Java/hx/201311/26587

相关参考

知识大全 关于设置Java虚拟机(JVM)的内存问题

关于设置Java虚拟机(JVM)的内存问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近做

知识大全 JAVA文件编译执行与虚拟机(JVM)介绍

JAVA文件编译执行与虚拟机(JVM)介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Jav

知识大全 深究Java虚拟机

深究Java虚拟机  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!JVM:JavaVirtualMa

知识大全 java虚拟机管理大内存

 众所周知jvm的内存是受限的一为机器的体系架构二为操作系统本身xxSPARC的内存映射是不同而各操作系统的内存管理机制也有区别以下是来自;Heap设定与垃圾回收JavaHeap分为个区Yo

知识大全 深入Java虚拟机中的Stack和Heap

深入Java虚拟机中的Stack和Heap  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在JV

知识大全 用java监视系统进程的两个解决方案

  用第一个java虚拟机启动另一个虚拟机并用第一个虚拟机的java程序去测试另一个虚拟机上java程序运行时的内存CPU资源占用情况  解决问题的限制和条件  》两个虚拟机运行在同台Windows_

知识大全 64位环境中的Java

64位环境中的Java  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!面向服务的架构(SOA)是一种

知识大全 Java程序性能优化-JVM调优

Java程序性能优化-JVM调优  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   JV

知识大全 Java程序员的迷失—论“虚拟机”

Java程序员的迷失—论“虚拟机”  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  虚拟机技术现在

知识大全 《深入理解Java虚拟机》笔记

《深入理解Java虚拟机》笔记  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    在C里面我们想