Computer >> Máy Tính >  >> Lập trình >> Java

Làm cách nào để đo thời gian thực thi cho một phương thức Java?

Nói chung, thời gian trôi qua là thời gian từ điểm bắt đầu đến điểm kết thúc của một sự kiện. Sau đây là nhiều cách khác nhau để tìm thời gian đã trôi qua trong Java -

  • Phương thức currentTimeMillis () trả về thời gian hiện tại tính bằng mili giây. Để tìm thời gian đã trôi qua cho một phương thức, bạn có thể nhận được sự khác biệt giữa các giá trị thời gian trước và sau khi thực thi phương thức mong muốn.
  • Phương thức nanoTime () trả về thời gian hiện tại tính bằng nano giây. Để tìm thời gian đã trôi qua cho một phương thức, bạn có thể nhận được sự khác biệt giữa các giá trị thời gian trước và sau khi thực thi phương thức mong muốn.
  • Phương thức now () của lớp Instant trả về thời gian hiện tại và các phương thức Duration.between () trả về sự khác biệt giữa hai giá trị thời gian đã cho để thời gian trôi qua truy xuất các giá trị thời gian trước và sau khi thực thi mong muốn và truy xuất thời lượng bằng phương thức Duration.between ().
  • Thư viện commons của Apache cung cấp một lớp được gọi là Đồng hồ bấm giờ để nó cung cấp các phương thức start () stop () và getTime () để tìm thời gian thực thi một phương thức.

Ví dụ

Ví dụ sau minh họa cách tìm thời gian thực thi của một phương thức bằng các phương pháp được đề cập ở trên -

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("Elapsed Time in nano seconds: "+ (end1-start1));      
      long start2 = System.currentTimeMillis();
      obj.test();
      long end2 = System.currentTimeMillis();      
      System.out.println("Elapsed Time in milli seconds: "+ (end2-start2));
      Instant inst1 = Instant.now();
      obj.test();
      Instant inst2 = Instant.now();      
      System.out.println("Elapsed Time: "+ Duration.between(inst1, inst2).toString());
      StopWatch stopWatch = new StopWatch();
      stopWatch.start();
      obj.test();
      stopWatch.stop();      
      System.out.println("Elapsed Time in minutes: "+ stopWatch.getTime());
   }
}

Đầu ra

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, Elapsed Time in nano seconds: 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, Elapsed Time in milli seconds: 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, Elapsed Time: 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, Elapsed Time in minutes: 1