博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
性能测试之计算性能
阅读量:6687 次
发布时间:2019-06-25

本文共 1733 字,大约阅读时间需要 5 分钟。

计算性能,简单的说就是执行一段代码所用的时间。

我们在以前一定写过类似代码来计算执行某一段代码所消耗的时间:

long start = System.currentTimeMillis();

long end = System.currentTimeMillis();

System.out.println(“time lasts ” + (end – start) + “ms”);

在每个方法中都写上这么一段代码是一件很枯燥的事情,我们通过java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler利用动态代理来很好地解决上面的问题。

++ 实现InvocationHandler接口 ++

public class Handler implements InvocationHandler {

  private Object obj;

  public Handler(Object obj) {

    this.obj = obj;

  }

  public static Object newInstance(Object obj) {

    Object result = Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new Handler(obj));

    return result;

  }

  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

    Object result;

    try {

      Log.i(“Handler”, "begin method " + method.getName());

      long start = System.currentTimeMillis();

      result = method.invoke(obj, args);

      long end = System.currentTimeMillis();

      Log.i(“Handler”, "the method " + method.getName() + “ lasts ” + (end – start) + “ms”);

    } catch (InvocationTargetException e) {

      throw e.getTargetException();

    } catch (Exception e) {

      throw new RuntimeException(“unexpected invocation exception: ” + e.getMessage());

    } finally {

      Log.i(“Handler”, "end method " + method.getName());

    }

  }

}

++  应用Handler类测试计算性能  ++

public interface Testing {

  public void testArrayList();

  public void testLinkedList();

}

public class TestingImpl implements Testing {

  public void testArrayList(){…}

  public void testLinkedList(){…}

}

// 测试代码

Testing testing = (Testing) Handler.newInstance(new TestingImpl());

testing.testArrayList();

testing.testLinkedList();

使用动态代理的好处是你不必修改原有代码FootImpl ,但是有一个缺点--如果你的类原来没有实现接口,你不得不写一个接口。

上面的例子演示了利用动态代理比较两个方法的执行时间,有时候通过一次简单的测试进行比较是片面的,因此可以进行多次执行测试对象,从而计算出最差、最好和平均性能。

转载地址:http://owhao.baihongyu.com/

你可能感兴趣的文章
Reactive Extensions(Rx) 学习
查看>>
SystemTap知识(一)
查看>>
OracleLinux上安装数据库(DBCA)
查看>>
IOS开发 应用程序图标数字角标
查看>>
利用 FormData 对象发送 Key/Value 对的异步请求
查看>>
vlc做转发的命令
查看>>
MySQL:日期函数、时间函数总结
查看>>
【技术贴】三星Note8 N5100实用教程,关闭相机快门声,增加浏览器退出按钮。...
查看>>
C# 调试程序时如何输入命令行参数
查看>>
如何成为强大的程序员?
查看>>
C#获取全部目录和文件
查看>>
跨站请求伪造CSRF
查看>>
关于同一用户不能同时登录问题的探讨(2/2)
查看>>
IE bug之location.href没有referer
查看>>
VB将MSHFlexGrid数据导出到Excel文件通用功能
查看>>
Opengl绘制我们的小屋(三)纹理绘制
查看>>
前端开发者进阶之函数反柯里化unCurrying
查看>>
session 防止表单重复提交
查看>>
Windows Phone开发(1):概论
查看>>
NSNotification的使用(对观察者模式最通俗、易懂的讲解)
查看>>