在Java中衡量執行時間– Spring StopWatch示例

兩種方法可以通過使用System.currentTimeinMillis()或通過使用System.nanoTime() 來測量Java中經過的執行時間 。 這兩個方法可用于測量 Java中兩個方法調用或事件之間的經過時間或執行時間計算經過的時間是Java程序員要做的第一件事,即弄清方法要執行多少秒或毫秒,或者某個特定代碼塊要花費多少時間。 大多數Java程序員從一開始就熟悉System.currentTimeInMillis(),而Java 1.5引入了新版本的更精確的時間測量實用程序System.nanoTime,以及諸如Generics , Enum類型 ,auto等語言的一些新功能。裝箱和可變參數或可變參數 。 您可以使用它們中的任何一個來衡量Java中方法的執行時間。 盡管最好使用System.nanoTime()來更精確地測量時間間隔。
在本Java編程教程中,我們將看到一個簡單的Java程序,它通過使用System.nanoTime()和Spring框架的StopWatch實用工具類來測量執行時間。 本文是我繼續發布有關涵蓋Java基本概念的文章的繼續,例如如何在Java中比較String , 如何在Java中正確編寫equals方法以及在Java 中循環HashMap的4種方法 。 如果您還沒有閱讀它們,您可能會發現它們很有用。

衡量Java執行時間的Java程序示例

這是一個使用System.nanoTime 測量兩個代碼塊之間的經過時間代碼示例,在任何開放源代碼Java庫(如Apache commons lang,Google commons和Spring)中,還提供了StopWatch實用程序類,可用于測量Java的經過時間 。 StopWatch改進了可讀性,以在計算經過的執行時間時最大程度地減少了計算錯誤,但是請注意StopWatch并非線程安全的 ,不應在多線程環境中共享,并且它的文檔明確指出,它更適合用于基本性能評估的開發和測試環境在生產環境中執行時間計算。
import org.springframework.util.StopWatch;/*** Simple Java Program to measure elapsed execution time in Java* This Java Program shows two ways for measuring time in Java, by using System.nanoTime() which was* added in Java 5 and StopWatch which is a utility class from Spring Framework.*/
public class MeasureTimeExampleJava {public static void main(String args[]) {//measuring elapsed time using System.nanoTimelong startTime = System.nanoTime();for(int i=0; i < 1000000; i++){Object obj = new Object();}long elapsedTime = System.nanoTime() - startTime;System.out.println("Total execution time to create 1000K objects in Java in millis: "+ elapsedTime/1000000);//measuring elapsed time using Spring StopWatchStopWatch watch = new StopWatch();watch.start();for(int i=0; i < 1000000; i++){Object obj = new Object();}watch.stop();System.out.println("Total execution time to create 1000K objects in Java using StopWatch in millis: "+ watch.getTotalTimeMillis());}  }Output:
Total execution time to create 1000K objects in Java in millis: 18
Total execution time to create 1000K objects in Java using StopWatch in millis: 15
您應該使用哪一個來衡量Java中的執行時間
如果您使用的版本低于JDK 1.5,則取決于可用的選項,而System.currentTimeInMillis()在可用性方面是最佳選擇,而在JDK 1.5之后,nanoTime可以更好地測量經過時間,因為它更準確并且使用精確的系統時鐘并可以測量高達納秒的精度 。 雖然如果您正在使用上述Java開源庫中的任何一個,大多數情況下使用Spring而不是StopWatch也是更好的選擇,但是正如我之前所說, StopWatch 不是線程安全的 ,只能在開發和測試環境中使用。 就像SimpleDateFormat不是線程安全的一樣 ,您可以使用ThreadLocal為每個線程創建SimpleDateFormat,您也可以使用StopWatch做同樣的事情。 但是我不認為StopWatch是像SimpleDateFormat這樣的重對象。
這就是如何測量Java的經過時間或執行時間的全部內容。 使自己養成測量重要代碼段的性能和執行時間的習慣,尤其是在大多數時間執行的方法或循環。 在那些地方,對代碼進行小的優化可以提高性能。
參考: 如何在Java中測量經過的執行時間–來自我們JCG合作伙伴 Javin Paul的StopWatch示例,來自Javarevisited博客。

翻譯自: https://www.javacodegeeks.com/2012/08/measure-execution-time-in-java-spring.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371511.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371511.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371511.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言getch在哪個頭文件,用getch()需要頭文件嗎?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓#include #include #include "string.h"#includeusing namespace std;struct student{ int num;char name[10];char banji[10];float score[3];struct student *next;};struct student *creat(){struct student *head,*p…

My solution for Git Client Error: Permission denied (publickey)

在使用Git客戶端的過程中遇到的問題以及解決方案分享。 我之前已經安裝Git客戶端并且使用Git開發過公司項目&#xff0c;也已經正確生成PublicKey并且添加到SSH keys on github of my account&#xff0c;但是當我想從github上克隆另一個客戶端push的代碼的時候一直報錯&#x…

OutOfMemoryError:無法創建新的本機線程–問題神秘化

正如您從我以前的教程和案例研究中可能已經看到的那樣&#xff0c;要確定和解決Java Heap Space OutOfMemoryError問題可能很復雜。 我從Java EE生產系統中觀察到的常見問題之一是OutOfMemoryError&#xff1a;無法創建新的本機線程&#xff1b; HotSpot JVM無法進一步創建新的…

求10以內平均數的c語言,求助 給小學生出題,自己選加減乘除 做10題 10以內的數 然后統計分...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓#include #include #include void Menu(void){printf("1,加法 2,減法 3,乘法 4,除法 5,退出\n");printf("請選擇題目類型:");}int Plus(void){int a, b;a rand() % 10 1;b rand() % 10 1;printf("%-2…

linux常用命令大全(轉)好東西要分享

1、ls命令 就是list的縮寫&#xff0c;通過ls 命令不僅可以查看linux文件夾包含的文件&#xff0c;而且可以查看文件權限(包括目錄、文件夾、文件權限)查看目錄信息等等 常用參數搭配&#xff1a; ls -a 列出目錄所有文件&#xff0c;包含以.開始的隱藏文件 ls -A 列出除.及.…

Cobertura和Maven:集成和單元測試的代碼覆蓋率

在姜黃項目中&#xff0c;我們每晚維護一個儀表板。 在儀表板上&#xff0c;我們收集有關項目的統計信息&#xff0c;包括代碼覆蓋率&#xff0c;findbugs分析和其他指標。 我們一直在使用Maven EMMA插件來提供代碼覆蓋&#xff0c;但是遇到了EMMA問題。 在對類進行檢測后&…

二分圖之匈牙利算法模版

1 /*2 匈牙利算法模版鄰接表版3 最大匹配問題4 時間復雜度&#xff1a;O (nm)5 */6 #include <cstdio>7 #include <vector>8 #include <cstring>9 using namespace std; 10 const int maxn 505; 11 vector<int> v[maxn];//x v[i][j]表示i可以與x匹配…

android 字體描邊實現,android文字描邊功能的實現

這里也要簡單說一下&#xff0c;這些小模塊并不是我原創&#xff0c;也是當時查資料找到的&#xff0c;由于時間比較久&#xff0c;原文鏈接已經忘記了&#xff0c;所以這里就不列出引用鏈接了。不過這些代碼我都修改、完善過&#xff0c;也添加了一些注釋&#xff0c;希望對大…

Factorial vs Power

題意 輸入a&#xff0c;找到滿足n!>a^n 最小的n。 數據 第一行T(1 < T < 1e5)&#xff0c;表示測試樣例數.(2 < a < 1e6)。 輸入 3 2 3 4 輸出 4 7 9 這個東西一看就知道是二分求解的&#xff0c;但是我們還是不知道怎么求的&#xff0c;我們可以吧他們取對數然…

評論:Arun Gupta撰寫的“ Java EE 6 Pocket Guide”

這是我很高興寫的評論。 我的朋友阿倫&#xff08;Arun&#xff09;發布了Java EE 6袖珍指南&#xff0c;該指南將在您訂購時盡早提供。 我很早就知道這本書&#xff0c;因為我很樂意對其進行回顧&#xff0c;也感謝有機會為本書做出一點貢獻&#xff01; Kindle版本已經可用&a…

雙android手機同步工具,手機同步軟件Android Manager使用圖文教程

類型&#xff1a;手機工具大小&#xff1a;23.6M語言&#xff1a;繁體 評分&#xff1a;6.6標簽&#xff1a;立即下載Android Manager 可透過五個簡單的步驟設定&#xff1a;步驟一. 在計算機上安裝 Android Manager請點選以下之下載按鈕或直接于計算機上輸入下載網址&#xff…

Camel:構建基于消息的應用程序

這是一篇長文章&#xff0c;包含三個單獨的主題&#xff1a; Java的Apache Camel入門 使用CamelRunner改善路線的啟動 使用Camel構建基于消息的應用程序 但是&#xff0c;由于我準備了包含所有這些材料的camel-demo-1.0.0-SNAPSHOT-project.zip &#xff0c;因此我認為將它們…

android 網易item廣告,Android仿網易嚴選商品詳情頁

仿照網易嚴選商品詳情頁面&#xff0c;整個頁面分為兩個部分&#xff0c;上面一部分是Native的ScrollView&#xff0c;下面一部分則是WebView&#xff0c;其目的是為了可以進行分步加載。滑動到ScrollView底部時&#xff0c;繼續向上拖動&#xff0c;可以加載下面的WebView部分…

freemarker,數字,日期,布爾值常用的函數

${3.4?floor} ${3.4?ceiling} ${3.45?round} ${3.45?rtf} ${3.458?string("0.##")} ${3.42?string.percent} ${3.42?string.currency} ${date?string("yyyy-MM-dd")} ${date?date} ${date?time} ${date?datetime}${true?c} ${true?string} ${…

mysql聯合索引與Where子句優化淺析

問題描述&#xff1a;把排序、條件等一個一個去除來做測試&#xff0c;結果發現問題就出在排序部分&#xff0c;去除排序時&#xff0c;執行時間由原來的48秒變成0.3x秒。于是&#xff0c;把涉及排序的字段組成一個聯合索引alter table xx add index indexname(x1,x2,x3)&#…

有效使用Eclipse的熱門提示

以下是一些技巧&#xff0c;可以幫助您避免潛在的問題并在使用Eclipse時提高工作效率。 避免安裝問題 切勿在舊版本之上安裝新版本的Eclipse。 首先重命名舊版本&#xff0c;將其移開&#xff0c;然后將新版本解壓縮到干凈的目錄中。 恢復混亂的工作空間 對于許多開發人員來…

android拍照截圖組件,Android截圖命令screencap與視頻錄制命令screenrecord(示例代碼)...

查看幫助命令[email protected] ~$ adb shell screencap -vscreencap: invalid option -- vusage: screencap [-hp] [-d display-id] [FILENAME]-h: this message-p: save the file as a png.-d: specify the display id to capture, default 0.If FILENAME ends with .png it …

usaco 2017 February platinum

1.一條路&#xff0c;兩邊都是一個1到n的全排列&#xff0c;可以把其中一個全排列的起始位置改變&#xff08;比如123可以變成231或者312&#xff09; 然后把相同的數連起來&#xff0c;求小交叉數。 先算一下交叉數&#xff0c;然后直接一步步移動&#xff0c;O1更新一下狀態就…

Hessian 源碼簡單分析

Hessian 源碼簡單分析 Hessian 是一個rpc框架&#xff0c; 我們需要先寫一個服務端&#xff0c; 然后在客戶端遠程的調用它即可。 服務端&#xff1a; 服務端通常和spring 做集成。 首先寫一個接口&#xff1a; public interface HelloService { void sayHello(String n…

Java開發人員應該知道的三件事

對于那些長期關注JavaOne 2012會議的讀者來說&#xff0c;這是一篇有趣的文章。 我最近對Java冠軍Heinz Kabutz的采訪引起了我的注意&#xff1b; 包括他的Java內存難題程序&#xff0c;從Java內存管理的角度來看&#xff0c;這很有啟發性。 采訪中有一個特別的部分吸引了我的注…