当前位置:  开发笔记 > 编程语言 > 正文

Java性能分析:私有属性Getter具有较大的基准时间

如何解决《Java性能分析:私有属性Getter具有较大的基准时间》经验,为你挑选了1个好方法。

我正在使用TPTP来描述一些运行缓慢的Java代码,我遇到了一些有趣的东西.我的一个私有属性getter在执行时间分析结果中具有较大的基本时间值.公平地说,这个属性被称为很多次,但我绝不会猜到这样的属性需要很长时间:

public class MyClass{
    private int m_myValue;    
    public int GetMyValue(){
        return m_myValue;
    }
}

好的,所以在课堂上显然有更多的东西,但正如你所看到的,当调用getter时没有其他事情发生(只返回一个int).一些数字给你:

大约30%的运行调用是在getter上(我正在努力减少这个)

大约25%的运行基准时间用于此吸气剂

平均基准时间为0.000175s

为了比较,我在另一个使用此getter的类中有另一种方法:

private boolean FasterMethod(MyClass instance, int value){
    return instance.GetMyValue() > m_localInt - value;
}

其平均基准时间低得多,为0.000018s(低一个数量级).

这是什么交易?我假设有一些我不理解的东西或我遗漏的东西:

    返回本地原语真的需要比返回计算值更长的时间吗?

    我应该查看基准时间以外的指标吗?

    这些结果是否会产生误导,我需要考虑其他一些分析工具?

编辑1:根据下面的一些建议,我将方法标记为最终并重新运行测试,但我得到了相同的结果.

编辑2:我安装了YourKit的演示版本来重新运行我的性能测试,并且YourKit结果看起来更接近我的预期.我将继续测试YourKit并报告我发现的内容.

编辑3:更改为YourKit似乎解决了我的问题.我能够使用YourKit来确定代码中的实际慢点.下面有一些很好的评论和帖子(适当地提出),但我接受了第一个建议YourKit为"正确"的人.(我不以任何方式与YourKit有关联/ YMMV)



1> TofuBeer..:

如果可能的话尝试使用另一个分析器(Netbeans一个很好用).根据您的代码设置方式,这可能很难做到.

与许多其他工具一样,不同的分析器可能会产生不同的信息.

返回本地原语真的需要比返回计算值更长的时间吗?

返回实例变量所需的时间比返回局部变量(取决于VM)要长.你拥有的getter很简单所以它应该被内联,因此它变得和访问公共实例变量一样快(再次,它比访问局部变量慢).

但是你没有本地值(方法中的本地含义而不是类中的含义).

"本地"到底是什么意思?

我应该查看基准时间以外的指标吗?

我没有使用过Eclipse工具,所以我不确定它是如何工作的......如果它是一个跟踪或采样分析器(两者可以为这样的事情提供不同的结果),它可能会有所不同.

这些结果是否会产生误导,我需要考虑其他一些分析工具?

我会考虑另一种工具,只是为了看看结果是否相同.

根据评论进行编辑:

如果它是一个采样分析器,基本上会发生什么,对程序的每个"n次单位"进行采样以查看程序的位置.如果您调用的方法比另一种方法更多,那么它将显示为更多被调用的方法(更有可能的是,该方法正在运行).

跟踪分析器将代码添加到您的程序(称为检测的过程),以基本记录正在进行的操作.

跟踪分析器速度较慢但更准确,它们还需要更改程序(仪表过程),这可能会引入错误(不是我听说过它发生的......但我相信它至少在它们正在开发时)探查者).

采样分析器更快但不太准确(他们只是猜测一行代码的执行频率).

因此,如果Eclipse使用采样分析器,您可以看到您认为是奇怪的行为.更改为跟踪分析器将显示更准确的结果.

如果Eclipse使用跟踪分析器,那么分析分析器应该显示相同的结果(但是新的分析器可能会使您更明显地了解正在发生的事情).

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有