加快Java VM的运行时间?

时间:2013-06-21 12:53:15

标签: java performance performance-testing

我正在调查我们的一项性能测试中的奇怪行为: 在这个测试中,我执行了几次非常复杂的计算。测试显示了一些加速行为。第一次运行是最昂贵的运行之后,大约100次运行执行时间是1000-5000ns,之后它下降到10-40ns。由于测试使用随机生成的值,我修改了测试以生成一次数据,然后使用完全相同的数据执行测试。

为了消除类加载和其他问题,我甚至执行了一次运行并添加了一秒的睡眠,以便为任何背景内容提供完成加载类和其他东西的机会。

我本来期望在整个运行过程中有类似的执行时间,并且可以理解因垃圾收集而导致的性能下降......但是看到运行变得越来越快似乎很奇怪。

我无法解释这种行为。 VM中是否有任何可以进行某种优化的效果?

克里斯

1 个答案:

答案 0 :(得分:3)

此效果是由HotSpot引起的。

HotSpot执行字节代码的运行时执行。

首先它解释字节码。这很慢。

如果HotSpot检测到您的代码是经常执行的,它会将代码编译为执行代码的计算机上的本机代码。这首先提高了执行速度。

之后,HotSpot仍在分析您的代码。如果经常调用它(是程序的热点),HotSpot将优化您的代码。当它确定您的代码经常运行并且需要很长时间来执行时,这种情况会更频繁地完成。优化越来越激进。

因此,经常执行并花费很长时间的代码将越来越优化,如果您的代码可以优化,它将会做越来越多的优化。

可以找到here的白皮书。