2013-08-17 18 views
2

我們有一個具有Java IO操作的服務器應用程序。運行應用程序時,我們觀察到CompilerThread0和CompilerThread1的CPU使用率分別爲45%和41%。此時應用程序正在爲客戶端提供IO,如連接,接收和發送。據我探討與此有關,我發現編譯線程是爲了JIT和提高性能。Java CompilerThread佔用更多的CPU使用量

我的問題是第一個問題,爲什麼編譯器需要佔用很多CPU,以及如何最小化這個問題,以便我們可以將CPU分配給其他線程。

在此先感謝!

回答

4

我的問題是第一,爲什麼它是採取多CPU編譯器線程

在正常情況下,JIT編譯器應用程序後,應該踢在已經運行了一下(逐步)編譯經常調用的類/方法。一旦所有需要編譯的代碼都被編譯完成,編譯活動就會停止。

如果編譯活動沒有停止,那麼發生了一些奇怪的事情。它可能是以下之一:

  • 您的應用程序正在大量使用動態代理,並且不斷生成新的代理類。
  • 您的應用程序正在動態加載(和卸載)很多類。
  • 您遇到過某種類型的JVM錯誤。 (但我無法發現這些症狀相匹配的錯誤數據庫條目。所以我把這個「不可能的」。)

,以及如何減少這種讓我們可以給CPU給其他線程。

有潛在的JVM選項可能會有所幫助,但我認爲你最好搞清楚是什麼導致了這種情況。

+0

我會檢查上述建議,希望能得到原因。 – Viswanath