2016-10-04 95 views
0

我們有一個企業應用程序部署在wildfly 8.2中,最小堆最小&設置爲1.5 GB。其中一個操作導致太多的對象被加載到堆中。雖然該對象在操作後被取消引用,但jvm堆的使用情況並未下降。Jboss GC沒有釋放內存

但是,如果我手動觸發GC外部(使用jcmd),我看到在堆使用情況下的巨大下降。爲什麼普通的GC不像GC.run那樣減少內存?

JVM設置

-Xms1536m -Xmx1536m -XX:MaxMetaspaceSize =512米-XX:ReservedCodeCacheSize = 128M -server -XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath =/TMP -verbose:GC -XX :+ PrintGCTimeStamps -XX:+ PrintGCDetails -Djsse.enableSNIExtension =假-Dsun.rmi.dgc.client.gcInterval = 600000 -Dsun.rmi.dgc.server.gcInterval = 600000

回答

2

你從外面觸發什麼是主要/完全GC,除非絕對必要,否則不會自動觸發。爲了避免臭名昭着的GC暫停,JVM試圖在老一代中儘可能長時間地生活垃圾。

+1

請注意,OP正在降低GDC觸發GLC的頻率,GDC會間接影響此行爲。 +1 –

+0

值得注意......但它也適用於EJB嗎?在收到請求後應將它們合併並「清理乾淨」。我認爲DGC更多地是原始RMI使用的問題。 –

+1

gdc適用於rmi,但它確保無論您可能在做什麼,都會定期發生完整的GC。 –