2012-10-18 61 views
3

我想知道。我有一個簡單的Java Web項目和一個servlet。當沒有用戶使用它(我在GlassFish上本地託管它)時,我仍然在該進程的內存使用情況中看到鋸齒圖案。我似乎無法理解JVM在做什麼?我瞭解JVM使用的內存的正常流程。堆正在充滿應用程序正在創建的對象。在某個時間點,堆會到達垃圾收集器進入的點,這將刪除所有不再使用的「緩存」對象,以便可以創建新對象並且可以填充堆大小。閒置時JVM鋸齒圖案? JVM在此期間做了什麼?

我想知道的是,JVM在閒置時一直在做什麼? enter image description here

編輯:

就像我在評論中說。我在Eclipse中創建了一個非常簡單的Java應用程序,該應用程序顯示一個Swing窗口,顯示「hello world」。當我在Java VisualVM中觀察JVM的內存使用情況時,我看到了相同的鋸齒圖案。

回答

8

事實證明,VisualVM是有罪的。這是因爲VisualVM不斷向JVM詢問它的統計信息,所以JVM創建對象以將信息提供給VisualVM。

由於 Peter Lawrey

3

我的猜測是應用服務器正在做某種幕後的簿記。請記住,即使沒有人使用它,仍然有線程在後臺運行。此外,你的應用程序是否使用任何類型的按時間順序的觸發器框架,如Quartz?或者,如何記錄。即使它可能不會主動向文件發送日誌消息,記錄器仍然被調用,這導致各種事情被創建/銷燬。

+0

嗨CodeChimp感謝您的回覆!它很有道理,但是我找不到這個實例忙於什麼。 (畢竟有一個獨立的GlassFish主機進程)。我創建了一個非常簡單的java應用程序,其中包含一個表示'hello world'的swing窗口。當我看JVM時,它顯示出相同的鋸齒圖案...... JVM正在做一些事情,我真的很好奇,但到目前爲止無法在互聯網上找到...... –