快速业务通道

使用实时Java进行开发,第2部分 改善服务质量 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
中的第三个延迟来源是 JIT 编译器。在应用程序运行时,它将程序的方法从 javac 生成的字节码翻译为运行应用程序的 CPU 的本机指令。JIT 编译器是 Java 平台取得成功的基础,因为它实现了很高的应用程序性能,而且没有牺牲 Java 字节码的平台独立性。在过去 10 多年中,JIT 编译器工程师一直在尽力改善 Java 应用程序的吞吐量和延迟。

不幸的是,这类改进带来了 Java 应用程序性能的暂停,因为 JIT 编译器从应用程序 “偷取” 了一些周期来为特定方法生成已编译(或要重新编译)的代码。取决于被编译方法的大小和 JIT 选择编译它的积极程度,编译时间可能小于 1 微妙,也可能大于 1 秒(对于 JIT 编译器发现的非常大的方法,这类方法会占用应用程序的大量执行时间)。但是 JIT 编译器本身的行为并不是应用程序计时中的意外偏差的唯一来源。因为 JIT 编译器工程师将绝大部分精力都用在平均性能上,以最有效地改进吞吐量和延迟性能,所以 JIT 编译器通常执行多种优化,这些优化 “通常” 是正确的或 “在大部分情况下” 具有很高的性能。一般而言,这些优化非常有效,并且开发了启发方法来使优化很好地符合最常见的应用程序运行场景。但是,在一些情形下,这类优化可能带来严重的性能易变性。

除了预加载所有类,还可以请求 JIT 编译器在应用程序初始化期间显式编译这些类的方法。清单 4 扩展了 清单 2 中的类预加载代码,以控制方法编译:

清单 4. 受控的方法编译

Iterator<String> classIt = listOfClassNamesToLoad.iterator(); while (classIt.hasNext()) {    String className = classIt.next();    try {      Class clazz = Class.forName(className);      String n = clazz.name();      java.lang.Compiler.compileClass(clazz);    } catch (Exception e) {      System.err.println("Could not load class: " + className);      System.err.println(e);    } } java.lang.Compiler.disable(); // optional

使用实时Java进行开发,第2部分 改善服务质量(4)

时间:2011-01-27 IBM Mark Stoodley

这段代码将使 JIT 编译器加载一组类并编译所有这些类的方法。最后一行为应用程序的其余执行部分禁用 JIT 编译器。

与允许 JIT 编译器自由选择将编译哪些方法相比,此方法通常会导致较低的总吞吐量或延迟性能。因为在 JIT 编译器运行之前不必调用方法,JIT 编译器仅拥有少量与如何最佳地优化它要编译的方法相关的信息,所以这些方法的执行速度会更慢。而且,由于编译器被禁用,不会重新编译任何方法,即使这些方法占用了程序执行时间的一大部分,所以,大多数现代 JVM 中使用的这类自适应 JIT 编译框架将不起作用。要减少大量由 JIT 编译器引起的暂停,不是必须使用 Compiler.disable() 命令,但是保留下来的暂停将是在应用程序的热方法上执行的更加频繁的重编译,这通常需要更长的编译时间,对应用程序计时的潜在影响更大。在调用 disable() 方法时,可能不会卸载特定 JVM 中的 JIT 编译器,所以在应用程序运行时阶段,仍然可能消耗内存、加载共享库以及出现其他 JIT 编译器工件。

当然,本机代码编译对各个应用程序的性能的影响程度不尽相同。确定编译是否存在问题的最好方法是打开详细输出,确定编译发生的时间,进而确定它们是否影响应用程序计时。例如,使用 IBM WebSphere Real Time JVM,您可以使用 -Xjit:verbose 命令行选项打开 JIT 详细日志。

除了这种预加载和早期编译方法,应用程序作者无法执行太多操作来避免由 JIT 编译器引起的暂停,但特定于供应商的 JIT 编译器命令行选项除外(一种

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号