0

请我需要像(100)次一样多次调用java文件的主函数并测量它完成所需的时间。目标是将时间与其他一些文件进行比较。[从字面上看,我正在实现算法]。

我知道可以通过以下方式计算时间:

long startTime = System.currentTimeMillis();
GetExecutionTimes ext=new GetExecutionTimes();

ext.callMethod();
long endTime = System.currentTimeMillis();

System.out.println("Total elapsed time in execution of method callMethod() is :"
+ (endTime-startTime));

*其中 ("callMethod") 是我的方法的名称。

但是,如果我有一个完整的 java 文件,并且我想在计算它的执行时间时从另一个类(或文件)调用它的 main 函数,那么这样做的方法是什么?

总之:

任务1:从另一个类多次调用一个java文件的main函数。
任务 2:计算执行所需的时间(任务 1)。

非常感谢您对完成任务 1 和 2 的任何建议或想法。

在此先感谢您的帮助,

4

4 回答 4

3

如果你想多次调用它,我会使用循环。main(String[])您可以多次调用一个方法,但是最好调用底层算法。

于 2011-05-13T18:58:04.347 回答
3

在没有很好地理解 JVM、JIT、垃圾收集以及不同的非程序线程如何混淆您的基准测试的情况下,请注意不要进行此类基准测试。

您可以收集良好的基准,但这样做最终会成为统计挑战,因为测量结果相当嘈杂(由于 JVM 不时调度垃圾收集,JVM 暂停将您的代码编译为本机指令,并且本机指令通常运行速度比非本地快得多)。

也就是说,您可以像调用任何其他静态方法一样调用静态 main 方法。请注意,如果您真的想要“相同”的调用,您可能需要存储 args 数组。

于 2011-05-13T19:01:38.830 回答
2

您可以尝试创建JUnit测试用例并在运行程序中调用您的测试方法(内部将调用实际对象的 main)。这样您就可以通过 JUnit 获得执行时间。

于 2011-05-13T18:58:46.990 回答
1

main() 只是一个类中的公共静态方法,所以你总是可以像这样调用它

for (int i = 0; i < 100; i++) {
    MyClassWithMain.main(null);
}
于 2011-05-13T18:57:12.847 回答