0
我在JBoss中運行一個Java應用程序,它定期執行一個內存密集型任務。 org.jboss.Main使用的內存量在此期間上升,但一旦完成任務就不會下降。 我一直在使用VisualVM分析進程,並強制垃圾收集。 org.jboss.Main使用的內存大約爲1GB。堆轉儲的基本信息如下。JBoss不釋放內存
Total bytes: 53,795,695
Total classes: 5,696
Total instances: 732,292
Classloaders: 324
GC roots: 2,540
Number of objects pending for finalization: 0
我也看過使用內存的類,發現char []佔大部分內存。
有誰能告訴我爲什麼VisualVM顯示的內存被JBoss比我的活動監視器少20倍?如果任何人都可以提供任何建議或指導,以進一步閱讀如何讓JBoss在作業完成後釋放內存,這將不勝感激。
感謝Peter的快速反應。你的意思是'活動監視器顯示Full GC之後堆的大小。'所以我可以使用高達1GB堆之前需要變大?這是否意味着堆轉儲會顯示類似於「總字節數:1,000,000,000」的點 – elo96
由於您分配對象的速率而導致堆增長時有一個點。 GC試圖預測可能需要的尺寸,因此它可能沒有使用全部1 GB。注意:每個地區,伊甸園,倖存者和終身空間的大小都是獨立的。我預計伊甸園在某些時候會很飽滿,倖存者默認情況下會達到50%,而終身制度可能只會達到40%。 –
感謝您的澄清。我也會在內存區域做更多的閱讀。最後一個問題:我注意到活動監視器中的內存確實隨時間波動,但根據此[線程](http://www.coderanch.com/t/202451/Performance/java/JVM-memory-releasing)應該只會上升而不會下降。爲什麼我可以看到它波動? – elo96