如何测量预编译的 java 类的执行时间?

Posted

技术标签:

【中文标题】如何测量预编译的 java 类的执行时间?【英文标题】:How can I measure the execution time of a precompiled java class? 【发布时间】:2014-01-08 19:35:30 【问题描述】:

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

【问题讨论】:

不确定你需要什么级别的准确度,但是linux有内置的时间命令thegeekstuff.com/2012/01/time-command-examples 谢谢你,这将给我一个开始。但是那个时间不还包括JVM本身在程序运行之前加载所花费的时间吗?如果能够跟踪 JVM 执行程序所花费的时间,那就太好了。 它可能不会来自命令行,但您可以使用profiler 会的。不幸的是,这是我知道的唯一工具!希望其他人能给你一个更好的答案... 使用bash命令时间superuser.com/questions/266211/how-to-time-a-process-in-bash">看这个问题 【参考方案1】:

你可以像这样实现一个类:

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

这是命令行,但您需要一个桌面应用程序才能读取结果。

【讨论】:

【参考方案2】:

创建一个什么都不做的空白应用程序,启动时间。

为您的测试应用计时。

减去差值。

请注意,您会遇到各种 JIT、类加载时间等问题,这些问题会影响测量的准确性。至少您需要多次重复测试。

不过,测量本身也毫无意义。如果你看看你为什么想知道这一点,并从中看看是否有更有用的问题可以问,可能会更好。

【讨论】:

谢谢。做这个测量的原因是为了凭经验测量使用某些特定代码片段对程序执行时间的影响。但我只有 .class 文件。您对解决问题的更好方法有什么建议吗? 将类文件加载为库,编写一个基准测试程序来加载该库并针对您要测量的实际调用运行速度测试。注意微观基准测试陷阱 ***.com/questions/20655963/…

以上是关于如何测量预编译的 java 类的执行时间?的主要内容,如果未能解决你的问题,请参考以下文章

Rails Asset Pipeline 预编译,如何正确执行?

如何测量Haswell微架构的后期预取和杀死预取?

测量代码段的 Java 执行时间、内存使用和 CPU 负载

将预编译的 .NET 代码作为 Azure 函数执行

Java面试宝典每日3题:day28

JavaScript的预编译和执行