2009-07-16 83 views
2

我在一個搖擺應用程序工作。 連續半小時的使用後,我會感覺緩慢。我可以檢測垃圾收集器的工作時間嗎?

可以因爲GC運行嗎?

我如何才能找到在垃圾收集器通過任何JDK 1.5命令行選項運行?

謝謝

+1

這看起來像存儲器泄漏的症狀(其是難以跟蹤在java的次) – Chii 2009-07-16 10:48:50

回答

6

您可以使用jconsole.exe,它可以在您的jdk的bin目錄中找到。它向您展示了有關正在運行的JVM的大量細節。

+1

1爲JConsole的。您會看到內存使用情況的鋸齒圖,顯示GC何時啓動。如果您願意,您甚至可以觸發手動GC。我懷疑你會發現這雖然是GC。 – 2009-07-16 06:05:17

8

當您使用-XX啓動Java:+ PrintGC,它將每當垃圾收集打印的消息。

+0

和-XX:+打印GCDetails – 2009-07-16 08:17:01

4

GC很可能導致可觀察到的問題。 Java曾經有一個非常緩慢的GC,給它一個近乎永久的壞名聲。那個時間已經過去了。

慢的究竟是什麼? GC應該不會超過幾分之一秒,即使是罕見的全面收集通行證。

編輯:即使GC 運行的可測量的量,很可能只是問題的徵兆。無論代碼如何對GC提出這麼多要求,內部會導致比GC更慢的速度。

+1

這隻適用於小應用程序,這可能就是這種情況。一旦擴大內存使用量,GC就很容易成爲問題。在大多數情況下,它關於單個GC所花時間的垃圾收集數量。 – jens 2009-07-16 06:07:11

+1

如果小,你的意思是少於*一個或兩個*,那麼也許? – 2009-07-16 06:12:45

2

我非常懷疑這是你看到的GC。正如280Z28指出的那樣,GC通常運行速度非常快(儘管如果你做錯了某些事情仍然會導致性能下降)。你那時正在使用該程序嗎?如果沒有,也許你的記憶力有點低下,它會被分頁出去? (讓Eclipse運行時間超過半天而不使用它會導致一個狀態,我不能再使用它了。在內存很小的系統上它可能會更快發生)。

2

如果使用JDK最近是jvisualvm允許您連接到正在運行的進程,以研究這種最簡單的方法。然後您可以看到垃圾回收,內存使用情況和配置文件(如果需要) (它基本上是相應的NetBeans功能,可作爲JDK中的獨立應用程序使用)。

它補充和增強jconsole!

(但你的描述可能是由程序中的內存泄漏過多GC的。使用jvisualvm搞清楚)

1

GC本身可能是沒有問題的。但是,如果您有內存泄漏,則可能會導致GC使用嘗試清除內存的所有CPU。

0

因爲每個人都有前面所提到的,GC幾乎是肯定沒有問題。

我會嘗試像YJP(你的Java剖析,免費爲30天)來分析你的應用程序,並找出明顯放緩。內存泄漏是一個非常可能的原因。