![](/img/trans.png)
[英]Measuring Method Execution Time for a Java Web Service in a Production Environment
[英]Java - Measuring Method Execution Time
我正在嘗試使用計時器來測量算法的復雜性,以測量執行時間,同時更改輸入數組的大小。
我目前擁有的代碼非常簡單:
public void start() {
start = System.nanoTime();
}
public long stop() {
long time = System.nanoTime() - start;
start = 0;
return time;
}
它看起來可以正常工作,直到數組的大小變得很大為止,而我期望是O(n)復雜度算法的結果似乎是O(n ^ 2)。 我認為這是由於CPU上的線程,而其他進程在運行期間會以更大的n值插入更多時間。
基本上,我想測量進程運行了多少時間,而不是自從調用算法以來經過了多長時間。 有沒有簡單的方法可以在Java中做到這一點?
如果您想要當前線程(或實際上是任何任意線程)的實際CPU時間而不是掛鍾時間,則可以通過ThreadMXBean獲得。 基本上,從一開始就這樣做:
ThreadMXBean thx = ManagementFactory.getThreadMXBean();
thx.setThreadCpuTimeEnabled(true);
然后,每當要獲取當前線程的已用CPU時間時:
long cpuTime = thx.getCurrentThreadCpuTime();
您將看到ThreadMXBean也具有調用來獲取CPU時間和任意線程的其他信息。
關於計時復雜性的其他評論也適用。 單獨調用一段代碼的時間除其他因素外,還取決於CPU的狀態以及JIT編譯器在該特定時刻決定執行的操作。 算法的總體可伸縮性行為通常是在多次調用中出現的趨勢,您將始終需要為時序中的某些“異常值”做好准備。
此外,請記住,僅僅因為一個特定的時間在納秒表示 (或實際上毫秒)並不意味着時序其實有粒度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.