我正在使用TPTP来描述一些运行缓慢的Java代码,我遇到了一些有趣的东西.我的一个私有属性getter在执行时间分析结果中具有较大的基本时间值.公平地说,这个属性被称为很多次,但我绝不会猜到这样的属性需要很长时间:
public class MyClass{
private int m_myValue;
public int GetMyValue(){
return m_myValue;
}
}
Run Code Online (Sandbox Code Playgroud)
好的,所以在课堂上显然有更多的东西,但正如你所看到的,当调用getter时没有其他事情发生(只返回一个int).一些数字给你:
为了比较,我在另一个使用此getter的类中有另一种方法:
private boolean FasterMethod(MyClass instance, int value){
return instance.GetMyValue() > m_localInt - value;
}
Run Code Online (Sandbox Code Playgroud)
其平均基准时间低得多,为0.000018s(低一个数量级).
这是什么交易?我假设有一些我不理解的东西或我遗漏的东西:
编辑1:根据下面的一些建议,我将方法标记为最终并重新运行测试,但我得到了相同的结果.
编辑2:我安装了YourKit的演示版本来重新运行我的性能测试,并且YourKit结果看起来更接近我的预期.我将继续测试YourKit并报告我发现的内容.
编辑3:更改为YourKit似乎解决了我的问题.我能够使用YourKit来确定代码中的实际慢点.下面有一些很好的评论和帖子(适当地提出),但我接受了第一个建议YourKit为"正确"的人.(我不以任何方式与YourKit有关联/ YMMV)