1. 程式人生 > >Java Date Time 教程-時間測量

Java Date Time 教程-時間測量

原文連結 作者:Jakob Jenkov  譯者:魏嘉鵬

在Java中,用System.currentTimeMillis()來測量時間最方便。
你要做的是在某些操作之前獲取到時間,然後在這些操作之後你想要測量時間,算出時間差。下面是一個例子:

long startTime = System.currentTimeMillis();
callOperationToTime();
long endTime   = System.currentTimeMillis();
long totalTime = endTime - startTime;


現在變數totalTime將包含執行callOperationToTime()

方法所需要的全部時間。

反覆操作

由於System.currentTimeMillis()沒有返回精準的時間,所以不止一次地去執行測量操作是個不錯的主意。也許10次、100次或者1000次,甚至更多。這樣由於大粒度時間值(該值並不是每毫秒都在變化著)而導致的非精準時間將趨於平穩。(原文:That way inaccuracy caused by large grained time values (values that does not change every millisecond) is leveled out.)
反覆執行很多次測量操作的另一個很好的理由是,允許Java虛擬機器去裝載那些測量操作程式碼的classes

,即時編譯它,或許還能對它進行優化。(譯者注JVM中的JIT會將位元組程式碼中經常使用到的片段編譯為機器碼,帶來效能提升。有關JIT有篇不錯的文章介紹,地址在這

Timer類

前文所列出的計算方法是相當繁瑣的並且沉悶,我們可以將它封裝到一個Timer類中,下面是大概的例子:

public class Timer {

  private long startTime = 0;
  private long endTime   = 0;

  public void start(){
    this.startTime = System.currentTimeMillis();
  }

  public void end() {
    this.endTime   = System.currentTimeMillis();  
  }

  public long getStartTime() {
    return this.startTime;
  }

  public long getEndTime() {
    return this.endTime;
  }

  public long getTotalTime() {
    return this.endTime - this.startTime;
  }
}

下面是個如何使用Timer類的例子:

Timer timer = new Timer();
timer.start();
callOperationToTime();
timer.end();
long totalTime = timer.getTotalTime();

(全文完)