閱讀612 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java Date Time 教程-時間測量

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

1 long startTime = System.currentTimeMillis();
2 callOperationToTime();
3 long endTime   = System.currentTimeMillis();
4 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類中,下麵是大概的例子:

01 public class Timer {
02  
03   private long startTime = 0;
04   private long endTime   = 0;
05  
06   public void start(){
07     this.startTime = System.currentTimeMillis();
08   }
09  
10   public void end() {
11     this.endTime   = System.currentTimeMillis(); 
12   }
13  
14   public long getStartTime() {
15     return this.startTime;
16   }
17  
18   public long getEndTime() {
19     return this.endTime;
20   }
21  
22   public long getTotalTime() {
23     return this.endTime - this.startTime;
24   }
25 }

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

1 Timer timer = new Timer();
2 timer.start();
3 callOperationToTime();
4 timer.end();
5 long totalTime = timer.getTotalTime();

(全文完)

最後更新:2017-05-22 15:32:42

  上一篇:go  穀歌雲平台使用英特爾處理器背後 探索硬件廠商那顆“軟件”的心
  下一篇:go  找不到對象?也許你應該這樣做