使用实时 Java 进行开发,第 2 部分: 改善服务质量
2009-11-02 00:00:00 来源:WEB开发网通过存储应用程序在执行时将加载的类列表,并使用该列表填充 清单 2 中显示的循环的类名称列表,可以确保在应用程序开始运行之前加载这些类。当然,不同时刻执行应用程序可能加载不同的路径,所以一次执行的列表可能并不完整。出于此原因,如果应用程序正在开发之中,新编写或修改的代码可能依赖于未包含在列表中的新类(或者虽然包含在列表中,但不再需要的类)不幸的是,维护类列表可能是使用此方法预加载类的非常模麻烦的一部分。如果使用此方法,请记住,-verbose:class 输出的类名称与 -verbose:class does not match the format that's needed by Class.forName() 需要的格式并不匹配:详细输出中使用正斜杠将类包分开,而 Class.forName() 期望用句点来分开它们。
对于存在类加载问题的应用程序,可以借助一些工具来管理预加载,包括 Real Time Class Analysis Tool (RATCAT) 和 IBM Real Time Application Execution Optimizer for Java(参见 参考资料)。这些工具能够在一定程度上自动识别要预加载的正确类列表,以及将类预加载代码合并到应用程序中。
JIT 代码编译暂停
JIT 优化示例
JIT 优化的一个初始示例是数组副本专业化。对于经常执行的方法,JIT 编译器可以分析特定数组副本调用的长度,确定是否有些长度是相同的。在分析调用一段时间之后,JIT 编译器可以发现数组副本长度几乎总是为 12 字节。了解这一点之后,JIT 可以为数组副本生成一个非常快速的路径,以对目标处理器最有效的方式直接复制所需的 12 字节。JIT 插入一个条件检查,查看长度是否为 12 字节,如果是,则执行这个极其高效的快速路径副本。如果长度不为 12,则生成一条不同路径来以默认方式执行副本,这可能需要更长的时间,因为它需要处理任何数组长度。如果应用程序中的大多数操作都是用快速路径,那么常见的操作延迟将基于直接复制这 12 字节所需的时间。但是与通用操作计时相比,需要具有不同长度的副本的任何操作都将被延迟。
更多精彩
赞助商链接