快速业务通道

实时Java,第5部分 - 编写和部署实时Java应用程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
任何可供 Java VM 使用的 AOT 编译代码都不会被使用。相反,这些代码将会由 JIT 解释或动态编译。命令中的 -Xrealtime 选项启用了 RT Java VM。如果未提供此选项,则将使用 WebSphere Real Time 附带的 SE Java VM。

设置了 -Xnojit 标记后,WebSphere Real Time 将使用此解释器来运行未被预先编译的任何方法。这也就是说,如果它发现未被预先编译的应用程序版本(无论是在预先编译的 JAR 文件中还是在类路径指定的其他 JAR 文件中),代码仅能按照解释的速度运行。

实时Java,第5部分 - 编写和部署实时Java应用程序(6)

时间:2011-06-22 Caroline Gough

AOT 编译系统 JAR

我们建议,不仅要预先编译您的应用程序,还要对关键的系统 JAR 文件进行 AOT 编译。使用标准 Java API 的任何应用程序实际上都只得到了部分编译,除非系统 JAR 文件也被编译。大多数标准 API 类都存储在 core.jar 和 vm.jar 文件中,因此建议您首先对着两个文件进行 AOT 编译。对于 RT 应用程序。还应预先编译 realtime.jar。除此之外,应用程序的本质决定了还有哪些系统文件的预先编译能够带来性能收益。

AOT 编译系统 JAR 文件的过程与其他 JAR 文件的 AOT 编译过程截然不同。然而,由于系统 JAR 文件是从引导类路径加载的,所以您必须使用如下命令来将预先编译好的系统 JAR 文件附到引导类路径,从而确保其被使用:

java -Xrealtime -Xnojit -Xbootclasspath/p:aotSystemJarPath/core.jar:aotSystemJarPath/vm.jar: aotSystemJarPath/realtime.jar -classpath aotJarPath/realTimeApp.jar realTimeApp

-Xbootclasspath/p: 选项中的 /p 将预先编译好的系统 JAR 文件附到引导类路径。还可通过 -Xbootclasspath: 和 -Xbootclasspath/a: 选项(分别设置对应于设置和添加)操纵引导类路径。然而,如果您使用了 -Xbootclasspath: 或 -Xbootclasspath/a: 将 AOT 编译的 JAR 文件放到引导类路径中,那么编译好的类将不会被使用。

确认选取的是预先编译的 JAR

非常容易在类路径中出错,尤其是在您的应用程序包含多个 JAR 文件,而且您又预先编译了系统 JAR 文件的时候。错误会导致运行非预先编译的代码,而不是所需的预先编译代码。以下选项的组合可帮助您确定所使用的类是预先编译的:

-verbose:relocations 将预先编译代码的重定位信息打印到 STDERR。每次执行一个预先编译的方法时,都会打印一份日志记录消息。此选项的输出如下所示:

Relocation: realTimeApp.main([Ljava/lang/String;)V <B7F42A30-B7F42B28> Time: 10 usec

-verbose:class 为其载入的每个类向 STDERR 写入一条消息。该选项产生的输出如下所示:

class load: java/lang/Object class load: java/lang/J9VMInternals class load: java/io/Serializable class load: java/lang/reflect/GenericDeclaration class load: java/lang/reflect/Type class load: java/lang/reflect/AnnotatedElement

-verbose:dynload 提供关于 Java VM 所加载的各类的详细信息。此信息包含类名、其软件包以及类文件的位置。该信息的格式如下所示:

<Loaded java/lang/String from /myjdk/sdk/jre/lib/vm.jar> <Class size 17258; ROM size 21080; debug size 0> <Read time 27368 usec; Load time 782 usec; Translate time 927 usec>

遗憾的是,这一选项不会列出预先编译的 JAR 文件中的类。然而如果将其与 -verbose:class 选项结合使用,就可以根据类未出现的情况判断出该类已预先编译。列于 -verbose:class 输出之中但未列于 -verbose:dynload 输出之中的任何类都必然是从一个预先编译的 JAR 文件中加载的。您需要的 verbose 选项是 -verbose:class,dynload。

实时Java

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号