612
阿裏雲
技術社區[雲棲]
Java Date Time 教程-時間測量
在Java中,用System.currentTimeMillis()
來測量時間最方便。
你要做的是在某些操作之前獲取到時間,然後在這些操作之後你想要測量時間,算出時間差。下麵是一個例子:
1 |
long startTime = System.currentTimeMillis();
|
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
類中,下麵是大概的例子:
03 |
private long startTime = 0 ;
|
04 |
private long endTime = 0 ;
|
07 |
this .startTime = System.currentTimeMillis();
|
11 |
this .endTime = System.currentTimeMillis();
|
14 |
public long getStartTime() {
|
15 |
return this .startTime;
|
18 |
public long getEndTime() {
|
22 |
public long getTotalTime() {
|
23 |
return this .endTime - this .startTime;
|
下麵是個如何使用Timer
類的例子:
1 |
Timer timer = new Timer();
|
5 |
long totalTime = timer.getTotalTime();
|
(全文完)
最後更新:2017-05-22 15:32:42