java

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

64位环境中的Java


发布日期:2023年09月11日
 
64位环境中的Java
面向服务的架构(SOA)是一种软件设计典范可使无所不在的通信跨越不同企业连接众多的平台和设备从而使基础结构更加灵活SOA的流行是围绕可扩展标记语言(XML)用于定义元数据的业界标准化取得巨大成功的结果也是致力于使用XML在Web services (WbS)标签下开发新一代中间件的结果

大部分主要软件解决方案提供商都已采用Web services产品应用程序平台套件产品(如BEA WebLogic Platform )将来自多个开发商的产品跨越不同企业无缝地集成在一起这种方法有利于软件更好地集成在这一点上采用SOA三个领域中具有重要的意义企业应用程序集成(EAI)企业对企业(BB)集成和最近的移动软件解决方案SOA简化了硬件和软件构建模块的组合以适当的粒度提供适当的业务服务这允许企业既可以增加Intel Itanium 系列处理器的数量又可以向外扩展到Intel Xeon处理器采用SOA的解决方案还会淡化服务器与客户端之间的区别从而使所有可连接设备在企业计算环境中做出有价值的贡献

基于SOA的解决方案的基础不断扩大为激增的无线设备带来好处在应用程序间传递XML数据为SOA提供了基础还允许设备以不可分割的方式交换信息并将灵活的计算扩展到传统办公环境的边界之外

硬件和软件的发展可以进一步促进向SOA的转换这既需要原始速度方面的性能又需要具有处理不断增大的数据量的能力Intel Itanium系列处理器允许大量内存直接寻址从而提高了运算能力同时还能提供企业级的可靠性可用行和可伸缩性

除硬件性能外SOA还需要能够充分利用可用性能的执行环境BEA的WebLogic JRockit是一种企业Java虚拟机(JVM)它采用完全位的功能提供出色的性能BEA WebLogic JRockit利用极富创造力的代码性能和自适应最优化连同创新的可伸缩自适应垃圾收集器确保在Intel Itanium 体系结构上实现最佳性能

企业 Java和位寻址

特别是服务器应用程序倾向于利用大量可用内存企业Java应用程序倾向于访问大量数据因此大地址空间可以显着降低磁盘访问的次数此外大内存还允许对从网络访问接收的数据进行缓存从而也能潜在地降低网络流量业内领先的基准(如SPECjbb)在位体系结构(如Intel Itanium 微处理器)上表现得更好(参见表 硬件厂商硬件系统JVM名称CPU#结果Fujitsu Limited(富士通有限公司)PRIMEPOWERHotSpot 位Server VM在Solaris/SPARC 版上HewlettPackard(惠普)HP Integrity Superdome Server (Itanium M)HotSpot 位)在HPUX i v for Itanium Fujitsu Limited(富士通有限公司)PRIMEPOWERHotSpot 位Server VM在Solaris/SPARC _版上HewlettPackard(惠普)HP Superdome Server位Server VM 在HPUX i for PARISC +上Sun MicrosystemsSun Fire KHotSpot 位Server VM在Solaris/SPARC _版上

业界领先的基准(如SPECjbb)在位体系结构(如Intel Itanium 微处理器)上表现得更好(数据来源Standard Performance Evaluation Corporation(标准性能评测公司)[SPEC] specjbb评测结果)已发布的specjbb结果的前名都是在位处理器上取得的这里列出了前五位

Java应用程序将对象分配到堆通常具有较高的对象分配速率堆用完时就要进行垃圾收集以便释放堆空间使应用程序继续运行许多大型Java应用程序都得益于拥有较大的堆因为这可以降低垃圾收集的开销并且还允许JVM更加灵活地查找较小的插入点以便在其上收集垃圾

此外还常常可以从运行一个以上应用程序的平台上获得更高的性能例如在单个系统中创建三层设置是可能的方法是在单个平台上运行Web服务器应用程序服务器和数据库这种设置在具有较大内存的系统中将执行得更好通过群集运行应用程序的多个实例也是可行的大内存可使每个Java应用程序的实例都有较大的堆空间因此能够从降低垃圾收集开销中得益进而提高应用程序的整体性能

在典型的设置中有数台运行应用程序服务器的计算机全部通过网络连接到一台强大的后端数据库在数据库成为瓶颈时这种系统的性能通常依赖于数据库系统的饱和程度要解决此问题可以在应用程序服务器容器中使用缓存自然在具有大内存的位系统中这样更加有效

企业 Java与Intel Itanium 微处理器

如果可以使用多个位处理器Intel Itanium处理器系列可为企业Java应用程序带来许多引人注目的优点企业 Java应用程序需要高可靠性和x的可用性Itanium 微处理器上的RAS(可靠性可用性可服务性)特性可与多种其他服务器处理器相比参见表所示如表中所述Intel Itanium 微处理器可以提供比任何其他服务器微处理器更强的错误检测错误纠正和错误恢复功能

功能Itanium IBM PowerIntel Xeon MPSun UltraSparcOpteron对数据总线的错误恢复(ECC)XXX内部软错误逻辑检查Lockstep支持XX错误数据内嵌XX缓存可靠性(Pellston)X内存SDEC双位重试XXXXX内存节约XXXX分区X(节点)X(核心)X(节点)X(节点)电隔离分区X(节点)X(节点)X(节点)

几种服务器微处理器之间的RAS特性比较(按照本文发布时各开发商的可用产品文档)

Itanium 处理器系统总线将几种高级数据完整性功能集成到一起可以提高错误检测和错误纠正能力Itanium 处理器系统总线使用错误纠正代码(ECC)可以纠正单个位得错误检测双位错误发送中毒数据并可检测所有仅限于半字节(位)的错误系统设计人员也可以选择将相同的ECC代码用于其他系统级缓存主内存阵列或I/O子系统缓沖区中此外双位奇偶校验码还可以保护地址总线

总之基于Itanium 的解决方案可以赶上甚至超过先前成本较高的专用体系结构系统所提供的可靠性特性基于Itanium 的系统可以通过较低的成本提供这种可靠性同时还能提供多种操作系统选择和广泛的生态体系合作伙伴支持

增加处理器数量带来的性能可伸缩性是令人满意的因为通常情况下增加平台上处理器的数量要比更改为新的更加强大的平台破坏性低由于性能要求的不断提高向已部署的系统中增加更多处理器的能力必不可少无论是在产品中还是对于通过集群组成得其他产品Intel Itanium 处理器都可以提供非凡的处理器可伸缩性数据总线与内存之间的高带宽和大型片载缓存可以在单一平台上实现性能的线性提升对于企业 Java应用程序具有个处理器的基于Intel Itanium 的系统其性能在通常情况下是单处理器系统的

Intel Itanium 微处理器具有 MB的片载缓存并且很快即可提供更大的缓存除了可以去除来自前端总线(数据总线与内存之间的总线)的数据流量来提高处理器的扩展以外片载缓存还可以减少由于处理器等待内存而无法执行指令的时间企业应用程序确实拥有数量可观的工作数据而在这些大型片载缓存中可以轻松容纳相当大的工作数据集从而可以实现更高的性能

程序操作码通常保留在寄存器中当操作码的数量超过寄存器的数量时当前不需要的操作码就会通过两种方式被传输到内存中通过内存存储操作的显式方式或者通过将这些操作码移动到堆栈的隐式方式在很多平台上这会加重缓存和内部数据路径的压力并且还要插入很多附加指令才能移动这些操作码Intel Itanium处理器系列的架构中已经包含个通用寄存器和个浮点寄存器为包含大量操作码的服务器工作负荷提供了足够的空间

基于Intel Itanium 的系统利用显式并行指令计算(EPIC)功能超越了常规处理器体系结构的顺序访问特性应用程序通过编译器与处理器进行显式通信其操作可以并行完成这样可使整体使用效率更高通过使用预测技术降低分支指令和分支指令预测失败的次数还可以进一步提高性能Intel Itanium 处理器系列通过使用数据和控制推测(这些功能可以帮助隐藏与内存相关的处理器停顿)以便编译器提高性能从而提供额外的稳定性级别并提高整体可靠性和性能

挑战与问题

Java的流行是因为它与平台无关在一个平台上开发的应用程序也可以部署到任何其他平台应用程序以隐式方式依靠JVM来提供针对平台得优化性能代码生成线程管理内存分配和垃圾收集都是Java应用程序性能的重要方面因此JVM处理这些方面的方式就是一个关键的性能区别

Intel Itanium处理器系列使用EPIC体系结构这种体系结构的关键特性是多个指令组成几个指令束可以在同一时钟周期内发出这些指令束以便执行它们编译器控制用于识别可以组成指令束的指令的质询以便充分利用这种并行机制计算机的性能始终取决于所生成代码的质量和基础硬件快速使用代码的能力

伴随预期优势而来是任务的增加使用Intel Itanium体系结构编译器的任务可能会比其他平台上更多因为EPIC概念允许编译器大量占用更多的空间以便从这种体系结构中获益

Java的首要问题是代码生成是应用程序执行的一部分对于Java虽然编译器生成正确代码非常重要但迅速生成代码也是重要的速度较慢的代码生成器会对应用程序性能造成负面影响此外启动应用程序的较长延迟也是令人不快的

在编译器中代码调度程序是关键组件它需要查看可用指令然后决定哪些指令能够绑定到一起显然代码调度程序能够查看的指令越多找到适当指令的几率越大也就越能从代码并行机制中受益范围(即代码调度程序能够查看的代码数量)也是影响应用程序性能的一个重要因素

Java代码通常由大量的类和方法组成大多数方法一般都很小这样就会极大地限制调度程序可以查看的范围JVM需要找到能够扩展这一范围的方法JVM还必须能够高效地处理大量方法例如在SPECjAppServer基准中共有大约种方法没有一种方法能够使用超过%的执行时间

内存管理器也有必须面对的问题虽然具有较大的堆对性能有益但为了使堆管理算法伸缩自如这也加重了JVM的负担虽然始终都有堆碎片的问题但在堆较大时这一问题就很严重了

编译器和优化器

为了实现快速启动许多JVM选择在开始时首先解释Java字节码在随后运行时再对这些字节码进行编译然而JRockit首先使用JIT(Just In Time)编译器编译代码虽然启动时间稍长但这样可以使应用程序能够从一开始就提高性能为了实现快速启动WebLogic JRockit不使用所有可能的编译器优化虽然使用所有编译器优化可能会在应用程序执行的初始阶段获得较高性能但在启动时间上的额外延长也被认为是不必要的

从应用程序性能的角度考虑使用所有优化去编译所有方法也是不必要的因为编译时间也是应用程序执行时间的一部分因此不仅WebLogic JRockit不会在启动时完全优化所有方法而且在整个应用程序运行期间也会保留大量的方法不被优化WebLogic JRockit仅选择改进后能够最大限度地提高应用程序性能的函数然后仅对这一少部分方法进行优化

WebLogic JRockit有两个各不相同但可以协同操作的代码生成器JIT编译器和优化编译器如图所示大多数方法只能遍历图表的左半边某些选择方法将会利用优化编译器

BEA WebLogic JRockit有两条代码编译途径

WebLogic JRockit使用尖端的低开销的基于采样的技术来识别应该优化的函数JVM包含一个采样器线程该线程以周期性间隔唤醒并检查几个应用程序线程的状态它会识别每个线程正在执行什么方法并记录某些执行历史纪录采样器线程为所有方法跟蹤此信息当它发现频繁使用某一方法时就会打上标记以便进行优化在应用程序运行期间较早的阶段会有大量这种优化机会随着应用程序的继续执行优化机会出现的速率不断下降

由于方法的大小通常很小而范围对代码调度程序非常重要因此内嵌方法的优化是最重要的调用方法的代码直接在调用点插入在Java中这可能很难完成原因有很多如在执行期间开始前接口调用远程调用和虚拟调用中被调用函数的标识未知WebLogic JRockit拥有现成的技术能够解决一部分问题如果完成情况很差则内嵌方法可能会导致代码膨胀进而造成性能急剧下降WebLogic JRockit包含精心调试过的启发式可以防止这种性能下降

WebLogic JRockit中的优化编译器包含许多基于Intel Itanium 微体系结构的众所周知的代码生成技术这些技术包括尖端的寄存器分配器它可以充分利用Intel Itanium处理器系列的大寄存器堆栈(个通用寄存器和个浮点寄存器)

内存分配和垃圾收集

WebLogic JRockit的堆管理策略可以随线程数和堆空间大小一同缩放内存分配通过线程本地数组完成在堆上为每个线程分配约个对象的空间这种方案可以提升数据的空间位置和临时位置从而实现处理器缓存的高性能还会大大降低线程间的同步以便获得可分配给对象的堆空间线程本地数组的大小是性能的重要参数最佳大小取决于应用程序WebLogic JRockit包含相应的启发式可在应用程序执行期间对该参数进行调试

WebLogic JRockit包含多种垃圾收集器不同的应用程序可获益于不同的收集器JVM包含相应的启发式可以按各自适应方式为每个应用程序找到最佳的垃圾收集算法所有的垃圾收集器在设计上都可以正确处理大型堆算法可以利用堆中数据稀疏这一优势——即堆中包含的大多是由寿命短的对象形成的垃圾

对垃圾收集器加以区分根据是它们是否包含苗圃(代)标记阶段是否多线程扫除阶段是否多线程以及收集器是与应用程序并发运行还是在进行垃圾收集期间停止应用程序这些选择可以影响垃圾收集的频率和每次垃圾收集的持续时间(或暂停时间)对于最大应用程序吞吐量应该选择最小化总垃圾收集时间(垃圾收集频率的结果)和每次垃圾收集平均持续时间但是在很多应用程序中响应时间也是非常重要的在这些情况下必须确保暂停时间最小WebLogic JRockit允许用户指出应用程序最重要的要求(响应时间或吞吐量)然后WebLogic JRockit将选择能够实现所选目标的垃圾收集方法

碎片可能会成为严重的性能问题尤其是在大型堆空间的情况下更是如此在垃圾收集期间压缩堆空间将会解决这一问题但会影响性能因为压缩大型堆空间开销太大避免压缩也有问题堆的部分空间将无法使用从而导致频繁进行垃圾收集同样位置也会影响处理器缓存的性能

WebLogic JRockit使用滑动压缩窗口解决了这一问题在每次垃圾收集期间每次压缩堆的一个不同的小部分在窗口大小适当的情况下堆的性能与完全压缩一样好而垃圾收集的开销却与不压缩一样小

当SOA Java开发人员将他们的应用程序部署到使用JRockit的基于Intel Itanium 微处理器的平台上以后既可以提高运算能力同时又能获得所需的性能和可靠性机不可失马上使用这种技术吧!您最终会获益匪浅

Itanium是Intel公司或其子公司在美国及其他国家的商标或注册商标

               

上一篇:扫雷程序(Java语言)

下一篇:java阻塞队列 线程同步合作