我的应用程序显示出“老年代”/“终身代”大小上升的情况,当这达到“老年代”的最大限制时,PermGen大小会突然增加。 以下是我的代大小:
-Xmx1200m -Xms1200m -Xmn450m -XX:MaxPermSize=600m -XX:+UseParallelGC
这是在32位的Fedora上,所以无法拥有比这更大的堆。
该应用程序没有进行任何花哨的类加载,但是它使用了Spring IOC和Hibernate,Spring App-context.xml定义了大约1000个Bean。
该应用程序从175MB PermGen启动,稳定地增加到几个小时后的~250MB,并保持这种状态直到Tenured Generation达到~780 MB,然后PermGen跳到~500MB,而Old Gen则下降到~500MB。
这迫使我每天重新启动应用程序,并让我真正担心即将出现OutOfMemory错误。任何见解都将非常有帮助。
谢谢 Gala101
5月13日:请问当“Old Gen”被垃圾回收时会发生什么?JVM是否将“Old Gen”的集合放入PermGen中?我的PermGen峰值仅在从“Old Gen”进行收集时出现,而OldGen大小的减少与PermGen大小的增加密切相关。 PS:我不进行任何实时部署/卸载,因为那肯定会耗尽PermGen。 以下是来自我的监视页面的当前快照:(已分配的部分刚刚从~250 MB跳到500 MB)
PS Perm Gen
Type Non-heap memory
Usage init = 16777216(16384K) used = 254453736(248489K) committed = 504954880(493120K) max = 629145600(614400K)
Peak Usage init = 16777216(16384K) used = 254453736(248489K) committed = 504954880(493120K) max = 629145600(614400K)
Collection Usage init = 16777216(16384K) used = 252421536(246505K) committed = 504954880(493120K) max = 629145600(614400K)