如何解释表示很多itme用在方法调用上的探查器?

时间:2018-06-20 19:52:00

标签: java profiling yourkit

我目前正在使用YourKit Java分析器来调整相当复杂的计算机仿真。但是,我对大约十分钟的分析会话中出现的一些结果感到有些困惑。例如,

Method                                                                 Time (ms)
MyClass.java:185                                                         124,032
MyClass.java:185 > Complicated.doMath(MyClass)                           157,032
MyClass.java:176                                                         113,645
MyClass.java:176 > Sparse3DLattice.setObjectLocation(Object, Int3D)      185,233

在所谓的方法中,延迟是有意义的。 doMath进行了一些相当复杂的计算,setObjectLocation更新了对象在HashMap中的位置。

但是,第185行和第176行都非常简单,因为它们基本上只是调用一个方法。第176行如下所示:

// Set the new location     
location = new Int3D(x, y, z, Sparse3DLattice.hashCoordinates(x, y, z));
grid.setObjectLocation(this, location); // 176

// End of method

第185行是用一种简单的方法包装的,

private boolean doMath() {
    return complicated.doMath(this); // 185
}

假设分析器是正确的,因为方法调用要花费大量时间,我怀疑这是因为MyClass是一个相当复杂的对象。由于JVM needs to do work传递了this,因此延迟由此而来。

这是一个合理的假设吗?如果是这样,在这些情况下我该如何提高性能?

0 个答案:

没有答案