【发布时间】:2021-11-08 14:05:01
【问题描述】:
我写了一个程序,现在我想计算我的程序从开始到结束的总运行时间。
我该怎么做?
【问题讨论】:
标签: java performance
我写了一个程序,现在我想计算我的程序从开始到结束的总运行时间。
我该怎么做?
【问题讨论】:
标签: java performance
使用System.nanoTime 获取当前时间。
long startTime = System.nanoTime();
.....your program....
long endTime = System.nanoTime();
long totalTime = endTime - startTime;
System.out.println(totalTime);
以上代码以纳秒为单位打印程序的运行时间。
【讨论】:
在你的 main 方法的开头,添加这行代码:
final long startTime = System.nanoTime();
然后,在你的 main 方法的最后一行,你可以添加:
final long duration = System.nanoTime() - startTime;
duration 现在包含程序运行的时间(以纳秒为单位)。例如,您可以像这样打印此值:
System.out.println(duration);
如果要以秒为单位显示持续时间,则必须将该值除以 1'000'000'000。或者如果你想要一个Date 对象:Date myTime = new Date(duration / 1000); 然后你可以访问Date 的各种方法来打印分钟数、小时数等。
【讨论】:
nanoTime 之间发生的事情完全没有影响。
long seconds = TimeUnit.NANOSECONDS.toSeconds(after - before);
如果您想要更精确的读数,请使用 System.currentTimeMillis() 或 System.nanoTime()。通常,如果您需要将值输出给用户,毫秒就足够精确了。此外,System.nanoTime()可能返回负值,因此,如果您使用该方法,返回值可能不正确。
一般和广泛的用途是使用毫秒:
long start = System.currentTimeMillis();
...
long end = System.currentTimeMillis();
NumberFormat formatter = new DecimalFormat("#0.00000");
System.out.print("Execution time is " + formatter.format((end - start) / 1000d) + " seconds");
请注意,纳秒通常用于计算非常短且精确的程序执行,例如单元测试和基准测试。因此,对于整个程序执行,毫秒是更可取的。
【讨论】:
对此的一般方法是:
main() 的开始时间。main() 的末尾。提示:查看System.nanoTime() 或System.currentTimeMillis()。
【讨论】:
您需要获取应用程序启动的时间,并将其与应用程序结束的时间进行比较。
应用启动时:
Calendar calendar = Calendar.getInstance();
// Get start time (this needs to be a global variable).
Date startDate = calendar.getTime();
申请结束时
Calendar calendar = Calendar.getInstance();
// Get start time (this needs to be a global variable).
Date endDate = calendar.getTime();
要获得差异(以毫秒为单位),请执行以下操作:
long sumDate = endDate.getTime() - startDate.getTime();
【讨论】:
除了众所周知的(并且已经提到过)System.currentTimeMillis() 和 System.nanoTime() 之外,还有一个名为 perf4j 的简洁库,它可能也很有用,当然这取决于您的目的。
【讨论】: