有两种方法可以通过使用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.nanoTimelong 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 StopWatchStopWatch 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的经过时间或执行时间的全部内容。 使自己养成测量重要代码段的性能和执行时间的习惯,尤其是在大多数时间执行的方法或循环。 在那些地方,对代码进行小的优化可以提高性能。
参考: 如何在Java中测量经过的执行时间–来自我们JCG合作伙伴 Javin Paul的StopWatch示例,来自Javarevisited博客。
翻译自: https://www.javacodegeeks.com/2012/08/measure-execution-time-in-java-spring.html