码迷,mamicode.com
首页 > 编程语言 > 详细

统计方法运行时间【Java实现】

时间:2014-10-20 20:59:06      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   使用   java   for   

接口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实现】

标签:style   blog   color   io   os   ar   使用   java   for   

原文地址:http://www.cnblogs.com/lovesqcc/p/4038393.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!