如何测量 Java 方法的执行时间?
通常,经过时间是事件从起点到终点的时间。以下是在Java中查找经过时间的各种方法
currentTimeMillis()方法以毫秒为单位返回当前时间。要查找方法的经过时间,您可以获取执行所需方法之前和之后的时间值之间的差异。
nanoTime()方法以纳秒为单位返回当前时间。要查找方法的经过时间,您可以获取执行所需方法之前和之后的时间值之间的差异。
Instant类的now()方法返回当前时间,Duration.between()方法返回给定的两个时间值之间的差以获取经过的时间检索所需方法执行前后的时间值并检索使用Duration.between()方法的持续时间。
Apache公共库提供了一个称为Stopwatch的类,它提供了start()、stop()和getTime()方法来查找执行方法所花费的时间。
示例
以下示例演示如何使用上述方法查找方法的执行时间-
import java.time.Duration; import java.time.Instant; import org.apache.commons.lang3.time.StopWatch; public class Example { public void test(){ int num = 0; for(int i=0; i<=50; i++){ num =num+i; System.out.print(num+", "); } } public static void main(String args[]){ Example obj = new Example(); long start1 = System.nanoTime(); obj.test(); long end1 = System.nanoTime(); System.out.println("以纳秒为单位的经过时间: "+ (end1-start1)); long start2 = System.currentTimeMillis(); obj.test(); long end2 = System.currentTimeMillis(); System.out.println("已用时间(以毫秒为单位): "+ (end2-start2)); Instant inst1 = Instant.now(); obj.test(); Instant inst2 = Instant.now(); System.out.println("已用时间: "+ Duration.between(inst1, inst2).toString()); StopWatch stopWatch = new StopWatch(); stopWatch.start(); obj.test(); stopWatch.stop(); System.out.println("已用时间(分钟): "+ stopWatch.getTime()); } }
输出结果
0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275, 以纳秒为单位的经过时间: 1882300 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275, 已用时间(以毫秒为单位): 1 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275, 已用时间: PT0.001S 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275, 已用时间(分钟): 1