【问题标题】:calculate time of a method execution in java计算java中方法执行的时间
【发布时间】:2017-10-30 08:53:14
【问题描述】:

我有一个接口 IMath 有加减法

public interface IMath {

    long add(int x, int y);
    long sub(int x, int y);
}

现在实现这个的数学类拥有这些方法的主体。

public class Math implements IMath {
    @Override
    public long add(int x, int y) {
        return x + y;
    }

    @Override
    public long sub(int x, int y) {
        return x - y;
    }
}

我希望每个方法的执行时间不使用 AOP,Reflection 并且方法代码中不应该有任何更改。

请提出各种方法来做到这一点

【问题讨论】:

    标签: java oop interface


    【解决方案1】:

    要在不使用 AOP、Reflection 且不更改方法代码的情况下计算执行时间,This 可能会对您有所帮助。

    【讨论】:

      【解决方案2】:

      除了使用可以检测代码并测量调用已用时间的分析器运行代码之外,您已经排除了所有实用选项。

      但是,我要注意,只有在重复调用方法的(现有)应用程序中使用此代码时,分析才可行。即便如此,由于方法很短,获得可靠的测量结果也很困难。

      【讨论】:

        【解决方案3】:

        当您不需要更改代码并想要添加其他行为时,只需使用decorator pattern 并装饰您现有的代码:

        public class MathMeasure implements IMath {
            private final IMath math;
            private long lastMethodTime;
        
            public MathMeasure(IMath math) { this.math = math; }
        
        
            @Override
            public long add(int x, int y) {
                long result;
                long start = System.currentTimeMillis();
                result = math.add(x, y);
                long end = System.currentTimeMillis();
                lastMethodTime = end - start;
                return result;
            }
        
            @Override
            public long sub(int x, int y) {
                 //same code here like in previous method
            }
        
            public long lastMethodInvokationTime() { return lastMethodTime; }
        
        }
        

        这是其工作原理的基本概念,您可能需要添加更复杂的时间执行日志记录。让我们看看我们在这里做了什么,使用装饰器模式,你创建了一些实现 IMath 接口的东西,然后把它放在装饰器中,然后随意将这堆传递给客户端(应用程序的另一部分),因为装饰器也有 IMath 接口,客户端看不到其他方法,但您可以在客户使用 IMath 后收集数据。

        【讨论】:

          猜你喜欢
          • 2012-12-10
          • 2021-06-21
          • 1970-01-01
          • 1970-01-01
          • 2020-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-03
          相关资源
          最近更新 更多