WEB开发网
开发学院软件开发Java 使用实时 Java 进行开发,第 2 部分: 改善服务质量... 阅读

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

 2009-11-02 00:00:00 来源:WEB开发网   
核心提示: 默认 JIT 编译,JIT 编译器线程在较低优先级上运行较低优先级上的默认 JIT 编译,使用实时 Java 进行开发,第 2 部分: 改善服务质量(9),在最初使用了提前(Ahead-of-time,AOT)编译代码在启动时受程序控制的编译,除非可以严格控制在任何给定时间有多少活动线程,否则,

默认 JIT 编译,JIT 编译器线程在较低优先级上运行

较低优先级上的默认 JIT 编译,在最初使用了提前(Ahead-of-time,AOT)编译代码

在启动时受程序控制的编译,启用了重新编译

在启动时受程序控制的编译,禁用了重新编译

仅 AOT 编译代码

这些选项根据预期的吞吐量/延迟性能级别和预期的暂停时间的降序来排列。默认的 JIT 编译选项使用在最低优先级(可能低于应用程序线程)上运行的 JIT 编译线程,该选项提供了最高的预期吞吐量性能,但也可能显示由(这 5 个选项的)JIT 编译引起的最多的暂停。前两个选项使用异步编译,这意味着如果应用程序线程尝试调用被选择用于重新编译的方法,那么该线程无需等到编译完成。最后一个选项具有最低的预期吞吐量/延迟性能,但没有由 JIT 编译器引起的暂停,因为此方案完全禁用了 JIT 编译器。

IBM WebSphere Real Time for Real Time Linux JVM 提供了一个称为 admincache 的工具,支持创建包含来自一组 JAR 文件的类文件的共享类缓存,也可以在相同代码中存储这些类的提前编译代码。可以在您的 java 命令行设置一个选项,以将存储在共享类缓存中的类从缓存加载到 JVM 中,以及在加载类时将 AOT 代码自动加载到 JVM 中。类似于 清单 2 中所示的类预加载循环已足够确保您充分获取提前编译代码的优势。参见 参考资料,获取 admincache 文档的链接。

线程管理

在交易服务器等多线程应用程序中,控制线程的执行对于消除交易时间的易变性至关重要。尽管 Java 编程语言定义了一种线程模型,该模型包含线程优先级的概念,但实际 JVM 中的线程行为主要由实现定义,包含 Java 程序可以依赖的许多规则。例如,尽管可以为 Java 线程分配 10 个线程优先级中的一个,但这些应用程序级优先级到操作系统优先级值之间的映射是由实现定义的。(对于 JVM,将所有 Java 线程优先级映射到相同的操作系统优先级值是一种非常有效的方法)。出于此原因,Java 线程的调度策略也是由实现定义的,但是通常在最终被分成一些时间段,所以即使是高优先级的线程最终也会与低优先级线程共享 CPU 资源。与较低优先级线程共享资源可能导致在调度较高优先级线程时出现延迟,以让其他任务可以获得一个时间片段。请记住,线程获取的 CPU 量不仅依赖于优先级,还依赖于需要调度的线程总数。除非可以严格控制在任何给定时间有多少活动线程,否则,即使是最高优先级线程用于执行操作的时间也可能出现相对较大的差异。

上一页  4 5 6 7 8 9 10  下一页

Tags:使用 实时 Java

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接