2014-01-08 34 views
1

我有几个java类文件,每个文件都有一个主要方法。由于这些是已编译的类,因此我无法修改代码并在调用类的main方法之前和之后跟踪系统时间。有什么办法可以从JVM或任何其他工具(最好是命令行)获得此度量?如何测量预编译的java类的执行时间?

+1

不知道你需要什么级别的精度,但linux有内置时间命令http://www.thegeekstuff.com/2012/01/time-command-examples/ – niiru

+0

谢谢,这应该给我一个开始。但是这段时间还没有包含JVM本身在程序运行之前加载的时间?能够跟踪JVM执行程序所用的时间会很棒。 –

+0

它可能不会来自命令行,但你可以使用'profiler'。 –

回答

0

您可以实现这样一个类:

class caller { 
     public static void main(String[] args) { 
       long initialTime = System.currentTimeMillis(); 
       precompiled_class_name.main(args); 
       long finalTime = System.currentTimeMillis(); 
       System.out.println("Spent time: " + (finalTime - initialTime)); 
     } 
} 

如果您需要更多的内部信息,使用一个分析器像这样的:http://jrat.sourceforge.net/

java -javaagent:shiftone-jrat.jar caller 

这是命令行,但你会需要桌面应用程序来读取结果。

0

创建一个空白的空应用程序无所事事,启动时间。

计时测试应用程序。

减去差异。

请注意,您正在遇到各种与JIT,课程加载时间等有关的问题,这些问题会影响您的测量精度。至少你需要重复测试很多次。

虽然测量本身也没有意义。如果你看看你为什么想知道这个问题,可能会更好,因为看看你是否可以问一个更有用的问题。

+0

谢谢。做这种测量的原因是凭经验测量使用某些特定的代码片段对程序执行时间的影响。但我所有的都是.class文件。你有没有更好的方法来解决这个问题的建议? –

+0

将类文件加载为库,编写基准测试程序以加载该库,并针对要测量的实际调用运行速度测试。了解微观基准陷阱 –

+0

http://stackoverflow.com/questions/20655963/java-benchmarking-why-is-the-second-loop-faster/20655996#20655996 –