接口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. 关于kvm虚拟机的克隆方法总结

    kvm虚拟机的克隆分为两种情况,第一种kvm宿主机上对虚拟机直接克隆 第二种通过复制配置文件与磁盘文件的虚拟机复制克隆(适用于异机的静态迁移). 现笔者将分别两种kvm虚拟机克隆的的详细操作过程都记录 ...

  2. Office word 2007不能另存为pdf格式的解决方法

    我们在使用Office word 2007时,经常会使用到另存为 PDF 或 XPS(P),遗憾的是,很多人都找不到这个选项, 或者在安装word的时候,并没有安装该加载项,需要你在后期安装,我们来怎 ...

  3. javaAgent 参数

    -javaagent 这个JVM参数是JDK 5引进的. Java -help的帮助里面写道: -javaagent:<jarpath>[=<options>] load Ja ...

  4. iOS学习笔记06—Category和Extension

    iOS学习笔记06—Category和Extension 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inher ...

  5. iOS - 开发屏幕及视图层次

    //屏幕视图分层 .UIWindow .UILayoutContainerView .UITransitionView .UIViewControllerWrpaperView .UILayoutCo ...

  6. wpgcms---banner图怎么调用

    使用wpgcms调用banner图,首先新建应用为 自定义应用,然后添加对应的字段信息,例如: 具体调用方式: <ul> {% set bannerlist = wpg.appdata.g ...

  7. Apache服务器301重定向去掉.html和.php

    在做优化网站的时候,会考虑到网站整站的集权: 考虑到网站可以生成静态,首先,让网站优先访问 index.html 之后考虑:去掉 .html 和 .php. 利用 .htaccess <IfMo ...

  8. dataframe转换为多维矩阵,然后可以使用values来实现

    import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(3,3),columns=list('abc'),ind ...

  9. 扩展Spring切面

    概述 Spring的切面(Spring动态代理)在Spring中应用十分广泛,例如还有事务管理,重试等等.网上介绍SpringAop源码很多,这里假设你对SpringAop有基本的了解.如果你认为Sp ...

  10. 【Git 使用笔记】第四部分:git在公司中的开发流程

    先声明几个变量 仓管A:主分支,只有master分支仓管B:开发分支,只有各个业务开发分支   仓管B fork 于 A 如下图 为了保证 代码的稳定性,只有 仓管B中的某个分支测试完毕并进行了代码r ...