2012-10-29 23 views
1

我目前正在研究調用一些JVM以及它的內存使用情況。我不明白的是,JVM在空閒時填充它的內存,只是在堆幾乎到達時才釋放它。爲什麼不存在一條扁平的使用內存?順便說一下,這個Java應用程序託管在glassfish上,但當我只有一個簡單的'hello world'swing應用程序時,我擁有相同的圖形。因此GlassFish不必對此做任何事情。JVM鋸齒閒置過程

enter image description here

提前感謝!

+1

[http://stackoverflow.com/questions/12958219/jvm-sawtooth-pattern-when-idle-what-does-the-jvm-do-in-the-meantime](http://stackoverflow.com/questions/12958219/jvm-sawtooth-pattern-when-idle-what-do-jvm-do-in-the-time) – arshajii

+0

請注意,您正在監控的JVM正在運行Glassfish。服務器(特別是JEE服務器)幾乎不會閒置,它們幾乎總是會做某種背景記賬,檢查緩存,低優先級的東西。檢查背景是什麼是很好的,但是如果你真的想檢查** JVM **行爲,我寧願檢查一個JVM,在其單個非守護進程中運行一個長期運行的Thread.sleep() )線程。 –

+0

謝謝。我意識到它確實在GlassFish上運行,所以我編輯了這篇文章。我會嘗試睡眠()方法,看看會發生什麼:) –

回答

5

什麼是JVM在閒置時填滿它的內存,只是在堆幾乎到達時才釋放它?

如果您的應用程序真正處於空閒狀態,最有可能的情況是VisualVM。嘗試降低採樣率並查看採樣率是否下降。

爲什麼不是隻有一條扁平的使用內存?

JMX是用Java編寫的,所以當它收集統計數據和序列化數據時,它會產生很多垃圾。您可以打開內存分析以確認所有內存消耗都與JMX &有關。如果您使用使用本機代理監視JVM的商業性能分析器,則不會看到此行爲。例如YourKit不會這樣做。

+1

是的,這是它!事實證明,當我將間隔更改爲每15秒而不是每1秒時,VisualVM的確顯示更少的內存使用情況!非常感謝你!你讓我很開心! –