接口Command:定义命令的执行操作

package common;

public interface Command {

    // 运行方法
void run(); }

 CommandRuntime 类:统计命令运行时间,使用命令模式

package common;

public class CommandRuntime {

    private Command command;

    public CommandRuntime(Command command)
{
this.command = command;
} public long runtime() { long start = System.currentTimeMillis();
command.run();
long end = System.currentTimeMillis(); return end-start;
} }

CombinationCommand:  解决组合问题的命令, 采用类适配器模式:

package algorithm.problems;

import algorithm.permutation.Combination;

import common.Command;

public class CombinationCommand extends Combination implements Command {

    public CombinationCommand(int n) {
super(n);
} public void run() {
solution();
} }

CombinationRuntime: 测量组合问题的运行时间

package algorithm.problems;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException; import common.CommandRuntime; public class CombinationRuntime { public static void main(String[] args)
{
try {
BufferedWriter fileWriter = new BufferedWriter(new FileWriter("runtime.txt"));
fileWriter.write("runtime: ");
fileWriter.newLine();
for (int i=1; i < 30; i++) {
CommandRuntime comRuntime = new CommandRuntime(new CombinationCommand(i));
long runtime = comRuntime.runtime();
fileWriter.write( "n = " + i + " : " + runtime + " ms");
fileWriter.newLine();
}
System.out.println("over.");
fileWriter.close(); } catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} } }

  另外一种使用反射机制实现的运行时间测量框架:

package common;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method; public class RuntimeMeasurement { public RuntimeMeasurement(int maxsize) {
this.maxsize = maxsize;
time = new double[maxsize];
} // 问题最大规模: 以 10 的 size 次幂计
private int maxsize ; // 运行时间以 ms 计
private double[] time ; /**
* measureTime : 对指定类型的对象调用指定参数列表的指定方法,并测量其运行时间
* @param type 指定对象类型,必须有一个 参数类型为 int 的公共构造器方法
* @param methodName 指定测试方法名称,要求是空参数列表
*/
public void measureTime(Class<?> type, String methodName)
{
try {
Constructor<?> con = type.getConstructor(int.class);
Method testMethod = null;
for (int i = 0; i < time.length; i++) {
Object obj = con.newInstance(power10(i+1));
testMethod = type.getMethod(methodName, new Class<?>[]{});
long start = System.nanoTime();
testMethod.invoke(obj, new Object[] {});
long end = System.nanoTime();
time[i] = ((end - start) / (double)1000000) ;
} } catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
} } /**
* showTime : 显示已经测量获得的运行时间,在 measureTime 方法调用后调用该方法。
*/
public void showTime()
{
for (int i=0; i < time.length; i++) {
System.out.printf("n = %12d : " , power10(i+1));
System.out.printf("%12.3f\n", time[i]);
}
} private int power10(int n)
{
int result = 1;
while (n > 0) {
result *= 10;
n--;
}
return result;
} }

统计方法运行时间【Java实现】的更多相关文章

  1. java监测方法运行时间/效率方法

    前言: 这周在写一个小项目,虽然小但是是纯调外部接口的,调完了接口还不停的循环接口返回的数据(已转换JSONArray),然后再判断值,再做不同处理,关键是数据量还比较大,这刚做完还没开始上线,测试也 ...

  2. 对于应用需要记录某个方法耗时的场景,必须使用clock_gettime传入CLOCK_MONOTONIC参数,该参数获得的是自系统开机起单调递增的纳秒级别精度时钟,相比gettimeofday精度提高不少,并且不受NTP等外部服务影响,能准确更准确来统计耗时(java中对应的是System.nanoTime),也就是说所有使用gettimeofday来统计耗时(java中是System.curre

    对于应用需要记录某个方法耗时的场景,必须使用clock_gettime传入CLOCK_MONOTONIC参数,该参数获得的是自系统开机起单调递增的纳秒级别精度时钟,相比gettimeofday精度提高 ...

  3. spring3.0框架检测方法运行时间测试(转)

    主要利用了Spring AOP 技术,对想要统计的方法进行横切处理,方法执行前开始计时,方法执行后停止计时,得到计时方法就是该方法本次消耗时间. 步骤: 首先编写自己的Interceptor类来实现M ...

  4. 成绩统计程序(Java)

    我的程序: package day20181018;/** * 成绩统计系统 * @author Administrator */import java.util.Scanner;//提供计算机直接扫 ...

  5. ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)

    一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间 (IP_DateTime),些表的信 ...

  6. 记一次使用修改字节码的方法解决java.lang.NoSuchMethodError

    接兔兔国际sdk ane 充值界面选择兔币充值就会闪退, 观察logcat 04-19 10:10:54.224: E/AndroidRuntime(20315): FATAL EXCEPTION: ...

  7. JAVA写JSON的三种方法,java对象转json数据

    JAVA写JSON的三种方法,java对象转json数据 转自:http://www.xdx97.com/#/single?bid=5afe2ff9-8cd1-67cf-e7bc-437b74c07a ...

  8. maven 在clean package时,出现:找不到符号 [ERROR] 符号: 方法 sqlDdlFilter(java.lang.String) 解决办法

    另一个项目中增加了,sqlDdlFilter 在调用的项目中clean package时,出现 找不到符号[ERROR] 符号: 方法 sqlDdlFilter(java.lang.String) 原 ...

  9. 基于git命令的代码统计方法

    基于git命令的代码统计方法 没什么好说的,基于git log命令,使用前提是安装了git ...... .统计所有人代码量 统计所有人代码增删量,拷贝如下命令,直接在git bash等终端,git项 ...

随机推荐

  1. HTML5 Canvas 画虚线组件

    前段时间由于项目需要,用到了HTML5 Canvas画图,但是没有画虚线的方法,自己写了一个HTML5 画虚线的组件. dashedLine.js if (window.CanvasRendering ...

  2. 应用Strong Name保存.NET应用程序集

    关于Strong Name的主题,网上已经有很多这方面的介绍,你可能最熟悉的印象就是这样 大部分的情况,这样就可以了.如果代码是机密的,还可能用到Delay sign only,这就复杂一些,请查找相 ...

  3. Linux大文件已删除,使用df查看已使用的空间并未减少

    今天在一台Linux系统里,使用df命令查看磁盘使用情况,发现/根分区使用了100% 然后删除一大文件/var/lib/pgsql/9.1/pgstartup.log,再使用df查看使用情况,显示内容 ...

  4. 【POJ2154】Color Pólya定理+欧拉函数

    [POJ2154]Color 题意:求用$n$种颜色染$n$个珠子的项链的方案数.在旋转后相同的方案算作一种.答案对$P$取模. 询问次数$\le 3500$,$n\le 10^9,P\le 3000 ...

  5. INTRO: THE DAWN (亡灵序曲) 中独白

    As the last ship sailed towards the distant horizon I sat there watching on a rock My mind slowly dr ...

  6. Js中对id和class属性进行模糊查询

    如题,从例子说明: <div id="divid" class="divclass" > <a id="divid-a" ...

  7. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(转)

    通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 本篇是在SSM框架基础上进行的. 参考文章: 1.Quartz学习——Qua ...

  8. centos6.9环境下JDK安装

    1.准备jdk安装文件: 这里我使用的是 jdk-7u79-linux-x64.tar.gz 2.在 /usr/local 目录下创建 sotfware目录,并上传JDK文件: 解压文件并修改文件夹为 ...

  9. mysql语句性能分析

    1.开启慢查询 slow_query_log = 1 //开启 slow_query_log_file = mysql_slow_query.log //日志文件位置 long_query_time ...

  10. xtrabackup安装部署(二)

    在官网中,复制相关链接下载最新版本(建议使用当前发布版本前6个月左右的稳定版本) https://www.percona.com/downloads/XtraBackup/LATEST/ 1.下载和安 ...