实时Java,第1部分: 使用Java语言编写实时系统 - 编程入门网
释。将从 JXE 中加载的编译了的方法作为本地代码执行。在图 5 中,同样还需要使用 -Xrealtime 命令行选项指定应该调用 RT VM。该命令行选项只有在 WebSphere Real Time 中可用。
AOT 代码的缺点 尽管 AOT 代码能够产生更确定的性能,它同样具有一些缺点。用于存储 AOT 代码的 JXE 文件通常要比存放类文件的 JAR 文件大很多,这是因为本地代码一般要比存储在类文件中的字节码密度小。执行本地代码还需要各种补充数据,用以描述如何将代码绑定到 JVM 以及如何捕获异常(比如),从而执行代码。第二个缺点是,尽管 AOT 编译过的代码比解释过的代码执行速度快,但是却比 JIT 编译的代码慢得多。最后一点,将解释的方法转换为编译的方法所用的时间(反之亦然)要比从其他解释方法调用一种解释方法(或从其他编译的方法调用编译方法)要长。在具有活动 JIT 编译器的 JVM 中,会通过不断编译编译代码的 “边缘部分” ,直到转换次数不会影响性能为止,最终消除这种代价。在具有 AOT 编译代码而没有 JIT 编译器的 JVM 中,转换次数是由被编译到 JXE 中的方法决定的。因此,我们通常推荐使用 AOT 编译整个应用程序以及应用程序所依赖的 Java 库类。正如上文提到的,扩展编译了的方法的数量将影响内存消耗,尽管性能从中获得的好处往往要比增加内存消耗更重要。 AOT 代码通常要比 JIT 代码的执行速度慢,这是由于 Java 语言自身的特性引起的。Java 语言需要执行的 程序在第一次引用类时对类进行解析。由于在程序执行前进行编译,AOT 编译器必须谨慎对待它所编译的代码所引用的类、字段和方法。AOT 编译的代码通常要比 JIT 编译的代码慢,这是因为 JIT 具有一个优点,它是在所执行的应用程序解析了大量这样的引用之后才执行编译的。然而,JIT 编译器还必须注意抵消它编译程序消耗的时间,因为这些时间将延长程序的执行时间。因此,JIT 编译器不会使用相同的优化度来编译所有的代码。而 AOT 应用程序则无此限制,因此它能够使用更主动的编译技术,所以有时可产生优于 JIT 编译代码的性能。此外,AOT 能够比 JIT 编译器编译更多的方法,因此 AOT 编译也能比 JIT 编译产生更好的性能。虽然如此,通常 AOT 编译的代码的速度要慢于 JIT 编译的代码。 要避免不确定性性能影响,WebSphere Real Time 提供的 JIT 编译器或者 AOT 编译器都不会使用现代 JIT 经常采用的主动的推测性优化。执行这类优化通常能够显著改善性能,但是并不适合在 RT 环境中使用。此外,为了全面支持 RTSJ 以及 Metronome 垃圾收集器,引入了一些开销到编译的代码中,而传统编译器不需要执行这些代码。鉴于以上这些原因,在 RT 环境下编译的代码的运行速度通常要比非 RT 环境编译的代码慢。 未来发展方向 在可预测性能和原始吞吐量方面,需要做更多的工作以加快 RT Java 环境。必须对 Java 语言实现两个关键领域的改进,从而使其在 RT 应用程序领域内获得成功: 为运行传统操作系统而希望获得更好的预测性的用户提供 RT 技术。 使 RT 技术简单易用。 面向软 RT WebSphere Real Time 的很多特性对以传统操作系统为目标的编程人员非常有用。增量 GC 和基于优先级的线程必定会在大量应用程序中得到应用,即使只能够提供软 RT 性能而不能保证硬 RT 的实现。比如,对于多数开发人员来说,提供可预测性能而不会出现不可预测的 GC 延迟的应用服务器是个非常有吸引力的想法。类似地,使用合理的调度目标,使应用程序运行高优先级并良好监视的 Java 线程将简化 Java 服务器的开发。 令 RT 更加简单 对于开发人员来说,将 Java 语言的优点引入 RT 系统的创建中将带来非常大的优势。但是,始终有要改善的地方,并且我们不断开发新的特性来进一步简化 RT 编程。您可以访问 IB |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |