stopwatch
有两种方法可以通过使用System.currentTimeinMillis()或使用System.nanoTime() 来测量Java中经过的执行时间 。
这两个方法可用于测量 Java中两个方法调用或事件之间的经过时间或执行时间 。
计算经过的时间是Java程序员查明方法执行需要多少秒或毫秒或特定代码块需要花费多少时间的第一件事。
大多数Java程序员从一开始就熟悉System.currentTimeInMillis(),而Java 1.5引入了新版本的更精确的时间测量实用程序System.nanoTime,以及诸如Generics , Enum类型 ,auto等语言的一些新功能。装箱和可变参数或可变参数 。
您可以使用它们中的任何一个来衡量Java中方法的执行时间。
尽管最好使用System.nanoTime()来更精确地测量时间间隔。
在本Java编程教程中,我们将看到一个简单的Java程序,它通过使用System.nanoTime()和Spring框架的StopWatch实用工具类来测量执行时间。
本文是我继续发布有关涵盖Java基本概念(例如, 如何在Java中比较String , 如何正确地在Java中编写equals方法以及在Java 中循环HashMap的4种 方法)的文章的延续。
如果您还没有阅读它们,您可能会发现它们很有用。
这是一个使用System.nanoTime 测量两个代码块之间的经过时间的代码示例,在任何开放源代码Java库(如Apache commons lang,Google commons和Spring)中,还提供了StopWatch实用程序类,可用于测量Java的经过时间 。
StopWatch提高了可读性,以在计算经过的执行时间时最大程度地减少了计算错误,但是请注意StopWatch不是线程安全的 ,不应在多线程环境中共享,并且它的文档明确指出,它更适合用于基本性能评估的开发和测试环境在生产环境中执行时间计算。
import org.springframework.util.StopWatch;
/**
* Simple Java Program to measure elapsed execution time in Java
* This Java Program shows two ways for measuring time in Java, by using System.nanoTime() which was
* added in Java 5 and StopWatch which is a utility class from Spring Framework.
*/
public class MeasureTimeExampleJava {
public static void main(String args[]) {
//measuring elapsed time using System.nanoTime
long startTime = System.nanoTime();
for(int i=0; i < 1000000; i++){
Object obj = new Object();
}
long elapsedTime = System.nanoTime() - startTime;
System.out.println("Total execution time to create 1000K objects in Java in millis: "
+ elapsedTime/1000000);
//measuring elapsed time using Spring StopWatch
StopWatch watch = new StopWatch();
watch.start();
for(int i=0; i < 1000000; i++){
Object obj = new Object();
}
watch.stop();
System.out.println("Total execution time to create 1000K objects in Java using StopWatch in millis: "
+ watch.getTotalTimeMillis());
}
}
Output:
Total execution time to create 1000K objects in Java in millis: 18
Total execution time to create 1000K objects in Java using StopWatch in millis: 15
您应该使用哪一个来衡量Java中的执行时间
如果您使用的是JDK 1.5以下版本,则取决于可用的选项,而System.currentTimeInMillis()在可用性方面是最佳选择,而在JDK 1.5之后,nanoTime可以更好地测量经过时间,因为它更准确并且使用精确的系统时钟并可以测量高达纳秒的精度 。
虽然如果您使用的是上述Java开源库中的任何一个,大多数情况下Spring比StopWatch也是更好的选择,但是正如我之前所说, StopWatch 不是线程安全的 ,仅应在开发和测试环境中使用。
就像SimpleDateFormat不是线程安全的一样 ,您可以使用ThreadLocal创建每个线程的SimpleDateFormat,您也可以使用StopWatch进行相同的操作。
但是我不认为StopWatch是像SimpleDateFormat这样的重对象。
这就是如何测量Java的经过时间或执行时间的全部内容。
使自己养成测量重要代码的性能和执行时间的习惯,尤其是在大多数时间执行的方法或循环。
在那些地方,对代码进行小的优化就可以提高性能。
翻译自: https://www.javacodegeeks.com/2012/08/measure-execution-time-in-java-spring.html
stopwatch