实时Java,第5部分 - 编写和部署实时Java应用程序 - 编程入门网
,第5部分 - 编写和部署实时Java应用程序(7)
时间:2011-06-22 Caroline Gough
配置文件导向的 AOT 编译 您可以构建一组更为优化的预先编译 JAR 文件,方法是创建一个您的应用程序频繁使用的方法配置文件,然后仅用 AOT 编译这些方法。 可以用 -Xjit:verbose={precompile},vlog=optFileName 选项(其中 optFileName 是列举您希望预先编译的方法的文件名)运行您的应用程序,从而动态创建这个配置文件:
该选项生成一个选项文件,其中包含一个方法签名列表,对应于 JIT 编译器在应用程序运行的时候编译的那些方法。如果有必要,您可以利用文本编辑器轻而易举地编辑这个文件。然后可将此文件提供给 jxeinajar 工具,来控制哪些方法将被预先编译。使用以下命令将该文件提供给工具:
WebSphere Real Time 附带的 InfoCenter 也讨论了配置式 AOT 编译(参见 参考资料,获得在线 InfoCenter 的链接)。它会指导您为上一节讨论的 Lunar Lander 生成运行时配置文件,还会为您说明如何使用此文件来选择性地预先编译 Lunar Lander 应用程序和系统 JAR 文件。此外,如果您希望尝试预先编译另外一个应用程序,还可以使用下一节讨论的 Sweet Factory 应用程序。 使用 NHRT WebSphere Real Time 包含 RTSJ 的完整实现。RTSJ 是在 RT 垃圾收集器(如 Metronome)出现之前设计的,包含实现 Java 运行时的可预测、低延迟性能的可选方法。 在 RTSJ 编写之时,Java 运行时中实现可预测式执行有两大阻碍,那就是 JIT 编译器和垃圾收集器。这两种技术都要使用应用程序编程人员无法控制的处理器时间。它们有着动态的本质,这也就是说,两种技术都会给 Java 应用程序引入不可预测的延迟。在某些情况下,这些延迟可能会持续数秒,这对于许多 RT 系统来说都是无法接受的。 JIT 编译器可关闭,或者用其他技术取而代之,如 AOT 编译,但 GC 无法轻易禁用。在移除 GC 之前,必须提供内存管理的替代解决方案。 为了支持无法容忍标准垃圾收集器导致延迟的 RT 系统,RTSJ 定义了不朽 和作用域 存储区,补充了标准 Java 堆。RTSJ 还添加了对两个新线程类的支持 —— RealtimeThread 和 NoHeapRealtimeThread(NHRT),使应用程序编程人员能够利用其他 RT 特性,包括使用堆以外的存储区。 NHRT 是无法与 Java 堆上创建的对象协同工作的线程。这使之能够独立于垃圾收集器运行,实现低延迟、可预测的执行。NHRT 必须使用作用域或不朽存储器创建其对象。这需要一种与基于堆的标准 Java 编程截然不同的编程风格。 下面,我们将使用 NHRT 开发一个简单的应用程序,展示使用非堆内存的独特挑战。 实时Java,第5部分 - 编写和部署实时Java应用程序(8)时间:2011-06-22 Caroline Gough示例场景 我们将为一家糖果厂实现一个自动化系统。这家工厂有多条生产线,将原材料加工成各种类型的糖果,然后将其装罐。该系统将设计用于检测已装罐但所装糖果过多或过少的罐子,并通知工厂工人处理装罐不当的罐子。 装罐完成后,就进入称重阶段,检查各罐内装入的糖果数量。如果一罐中的糖果数量超出目标 2%,则必须向工厂工人的控制屏幕发送一条消息,将此问题通知给工人。工人使用控制面板上显示的罐子 ID 来找到它,将其移出包装队列,然后在控制面板上确认该罐已移除。各罐质量必须写入日志文件,以便审计。 图 5 给出了示例场景的示意图: 图 5. 糖果厂场景 显然,这个示例有些刻意,但它能帮助您了解创建一个 NHRT 应用程序的挑战,尤其是在 NHRT 和其他线程类型间共享数据时。 外 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |