簡體   English   中英

測量JAVA中一部分代碼所花費的CPU時間

[英]Measure the CPU time elapsed for a part of code in JAVA

我目前正在嘗試測量Java中部分代碼的實際經過的CPU時間。 我讀到要獲得CPU時間,您必須使用

cpuTime = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();

但是實際上,當我嘗試在那段代碼中對其進行度量時,如果經過時間等於零,則會引發錯誤.....(在我看來,以納秒的精度是不可能的)。 while循環可以很大,也可以很小(至少10次指示)。

long startTime = ManagementFactory.getThreadMXBean()
                        .getCurrentThreadCpuTime();
// reset with seed solution for each neighborRule and
// each pivoting rule
t.setCurrentBestSolution(seedSolution);
while (t.chooseNextImprovingNeighborSolution(pivotingRule,
                        neighborRule));                 
long endTime = ManagementFactory.getThreadMXBean()
                    .getCurrentThreadCpuTime();
if (endTime - startTime == 0) {
    System.err.println(pivotingRule + ":" + neighborRule);
    System.err.println("END TIME:" + endTime);
    System.err.println("START TIME:" + startTime);
                }

任何想法 ? 我沒有正確使用CPUThread部分嗎? 我應該使用外部Java基准測試程序嗎?

提前致謝

我應該使用外部Java基准測試程序嗎?

是的,請這樣做。 Jprofiler在其他有用的指標中測量實際經過的時間。

SystemRuntime類的方法將為您提供幫助。 看一下:

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html http://docs.oracle.com/javase/1.5.0/docs/api/java/lang /Runtime.html

例如:您可以使用: System.currentTimeMillis(); 它以毫秒為單位返回程序前后的時間! (在main方法的開頭或結尾!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM