最大化 AIX 上的 Java 性能,第 2 部分: 速度需求
2008-11-10 08:26:34 来源:WEB开发网您还应该查找占用大量 CPU 时钟周期百分比的重要子例程。例如,某个 tprof 输出显示 clProgramCounter2Method 的值相当高:Subroutine Ticks % Source Address Bytes
============= ===== ==== ======== ======== ======
.clProgramCounter2Method 3551 14.8 /userlvl/ca131/src/jvm/sov/cl/clloadercache.c
在检查多个此类示例之后,我们发现删除 Throwable.printStackTrace 调用可以带来重要的性能改进。得出这个特定方法是从分析 tprof 输出开始的。
特定于 Java 的技巧
在几乎所有情况下(请参见相关技巧以了解例外情况),JIT 编译器都必须打开,因为这样导致的性能差异相当于执行字节代码与执行本机代码的差异。JIT 能够提供高达 25 倍的改进,因此它对 Java 来说是至关重要的性能组件。
垃圾收集也是另一个至关重要的组件,因此必须根据需要对其进行检查和调整。请注意,虽然启用 GC 跟踪(使用 -verbosegc)具有轻微的负面影响,但是能够监视和分析堆的优点显然胜过负面影响。另一种考虑方式在于,良好状况的堆会最小化通过 -verbosegc 打印的信息量,因此通过调整堆,您还可以最小化执行附加跟踪的开销。
基于特征的优化技巧
下面让我们看一下典型应用程序的不同特征。您应该定位到与您的应用程序类似的行为(无论是设计上的还是观察到的),并应用对应的技巧。
应用程序的长期性
IBM Java 旨在为诸如服务器代码等长期运行的应用程序提供更好的特征。如果由于某种原因要尝试运行持续时间不到 5 分钟左右的测试用例,您可能发现 IBM Java 为长期运行而做的准备会影响启动时间。如果应用程序的快速启动比长期运行更重要,请查看 技巧 CPU001:快速启动应用程序和 技巧 CPU004:完全去掉 GC。如果 技巧 CPU004:完全去掉 GC 不适用于您,可以改为考虑 技巧 CPU012:避免堆大小调整。在严格的情况下,如果您的测试用例是如此的短,以致 JIT 初始化也开销太大,您可能希望在关闭 JIT 的情况下进行测试。请注意,我们没有将禁用 JIT 作为一项独立的性能技巧提出来,这是因为,正如在上一篇文章中所提到的,这可能是影响应用程序性能的最糟糕的事情。
更多精彩
赞助商链接