Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的Java性能问题(JIT优化?)_Java_Performance - Fatal编程技术网

奇怪的Java性能问题(JIT优化?)

奇怪的Java性能问题(JIT优化?),java,performance,Java,Performance,在我的实用程序类中,我遇到了非常奇怪的性能下降-很快,我将方法last(revIndex)添加到我的本机类克隆中,它没有索引访问权限 public E last(int revIndex) { return (E)elements[arrBackPos(revIndex)]; } protected int arrBackPos(int index) { int size = (tail - head) & (elements.length - 1); if(

在我的实用程序类中,我遇到了非常奇怪的性能下降-很快,我将方法
last(revIndex)
添加到我的本机类克隆中,它没有索引访问权限

public E last(int revIndex) {
    return (E)elements[arrBackPos(revIndex)];
}

protected int arrBackPos(int index) {
    int size = (tail - head) & (elements.length - 1);
    if( index > 0 || -index >= size )
        throw new IndexOutOfBoundsException("...");
    return (tail + index - 1) & (elements.length - 1);
}
在使用NetBeans的分析器测试我的代码时,它表明
arrBackPos
是远远落后于其他CPU消费者的。删除安全检查(前三行)后,代码变得更快(10秒比20秒),但。。。在尝试优化代码后,我注意到在某些情况下,相同的安全检查代码会增加可忽略不计的时间(比如10.2秒vs.10秒)-仅删除/重新添加/重新编译代码可能会在一段时间内修复问题,但由于某些未知原因,在以后的执行中会重新出现

所以。。。是什么?为什么相同的代码在相同的执行条件下运行速度会慢两倍?有什么方法可以使性能持续快速


我怀疑短期运行时不会触发JIT,但在运行1..2分钟的数据集上会出现相同的问题。

为了确保这与JIT相关,请尝试使用
-Xcomp
标志运行。此选项强制所有内容的JIT。如果你的表现仍然不稳定,你可能需要考虑其他事情……你如何衡量绩效?请出示基准。不正确的基准测试通常是产生奇怪性能效果的原因。@apangin,我没有经典意义上的基准测试-我只是在预定义数据集上执行实际代码,@Paulo Mattos,下次问题再次出现时,我会尝试
-Xcomp
,我只是没有明确的方法来重现它。