2015-09-04 222 views
-1

我創建了一個可在單個線程上運行的可運行jar。該線程執行具有100次迭代的for循環。然而,CPU igae在i3處理器win7 64位機上高達60%。 我試圖分析process Explorer的CPU使用率javaw.exe CPU使用率高

原生線程正在消耗CPU。 本機線程都在msvcr100.dll!endthreadex + 0x60 正在使用cpu 我正在使用jdl 1.7。 有人可以請建議這裏可能會出現什麼問題。

這是代碼: 該應用程序接受套接字連接並處理客戶端發送的日期。

while (true) 
{ 
    try 
    { 
     Socket sock = ssock.accept(); 
     // This is the function which has the for loop   
     obj.MyFunction();   
    } 
    catch(Exception ex) 
    {    
     ssock.close(); 
    } 
    Thread.sleep(1000); 
}     

void MyFunction() 
{ 
    for(int i=0; i < 1000;i++) 
    { 
     // Processing done here 
    } 
} 
+2

如果你在這裏顯示你的代碼可能會有所幫助! –

+0

您需要JProfiler – ControlAltDel

+0

剛剛發佈的代碼 –

回答

0

我懷疑如果你試試這個:

ex.printStackTrace(); 

,你可能會得到一些更多的信息。現在,當你發生異常時,你不知道發生了什麼或者爲什麼。你對此保持沉默,這很少是打擊例外的正確行爲。

什麼是處理?如果你想做很多工作,那麼去60%cpu也許並不意外。算法的大O運行時間是什麼?數據集的大小是多少?

+0

egarding MyFunction()。它包含解析xml的代碼。我以xml的形式傳遞進程中的數據,該函數迭代所有節點以獲取數據。所有這些都發生在單線程中。 CPU使用率從40%到60%不等,有時甚至會凍結我的機器 –

+0

這裏是Process Explorer完成的分析圖像的鏈接[鏈接](http://www.123dl.org/installer/C/processs.png )。 爲什麼本地線程會佔用最大的cpu週期? –

+0

爲什麼一些代碼需要很多時間是一個非常廣泛的問題,迭代答案太多。所有的緩慢問題最終歸結爲算法和技術問題。如果你可以談論你在做什麼的算法複雜性,可以追求緩慢的技術原因,但就目前而言,我不想排除低效算法是正確的。 – juckele