WebLogic JRockit使用尖端的、低开销的、基于采样的技术来识别应该优化的函数。JVM包含一个采样器线程,该线程以周期性间隔唤醒,并检查几个应用程序线程的状态。它会识别每个线程正在执行什么方法,并记录某些执行历史纪录。采样器线程为所有方法跟踪此信息,当它发现频繁使用某一方法时,就会打上标记以便进行优化。在应用程序运行期间,较早的阶段会有大量这种优化机会,随着应用程序的继续执行,优化机会出现的速率不断下降。
由于方法的大小通常很小,而范围对代码调度程序非常重要,因此内嵌方法的优化是最重要的。调用方法的代码直接在调用点插入。在Java中,这可能很难完成,原因有很多,如在执行期间开始前,接口调用、远程调用和虚拟调用中被调用函数的标识未知。WebLogic JRockit拥有现成的技术,能够解决一部分问题。如果完成情况很差,则内嵌方法可能会导致代码膨胀,进而造成性能急剧下降。WebLogic JRockit包含精心调试过的启发式,可以防止这种性能下降。
WebLogic JRockit中的优化编译器包含许多基于Intel Itanium 2微体系结构的众所周知的代码生成技术。这些技术包括尖端的寄存器分配器,它可以充分利用Intel Itanium处理器系列的大寄存器堆栈(128个通用寄存器和128个浮点寄存器)。
内存分配和垃圾收集
WebLogic JRockit的堆管理策略可以随线程数和堆空间大小一同缩放。内存分配通过线程本地数组完成;在堆上为每个线程分配约1000个对象的空间。这种方案可以提升数据的空间位置和临时位置,从而实现处理器缓存的高性能。还会大大降低线程间的同步,以便获得可分配给对象的堆空间。线程本地数组的大小是性能的重要参数,最佳大小取决于应用程序。WebLogic JRockit包含相应的启发式,可在应用程序执行期间对该参数进行调试。