我正在尝试将我的应用程序部署到Tomcat,但未能这样做。我经常不断地获得OutofMemoryError permgen空间。 我尝试了各种命令行开关(在stackoverflow上搜索关于此的不同问题),如-XX:MaxPermSize,-XX:PermSize,-XX:+ CMSClassUnloadingEnabled,-XX:+ CMSPermGenSweepingEnabled
我给了permgen大小为64,128,256,512,但它们都不起作用。
有趣的是,当我收到错误时,我在任务管理器中看到java进程只占用了大约300mb的内存。我传给-Xms为1024m,但内存消耗仍然在300mb左右。
寻找可能是什么原因的意见?
我的系统详情: 戴尔Latitude 5420 Win XP 32位 4 GB RAM
答案 0 :(得分:0)
当你说“经常”时,你的意思是在你连续几次重新组合之后?如果是的话,这是Tomcat的一个众所周知的缺陷,你无法做任何事情。增加perm gen空间只会延迟不可避免的。
原因是反射会动态创建最终位于perm gen空间中的类,永远不会被回收。因此名称'perm gen' - 这是垃圾收集器不接触的永久代。
保护法告诉您,如果您拥有有限的容量,并且只是在不删除的情况下添加它,那么您最终将耗尽容量。这就是你在这里发生的事情。
答案 1 :(得分:0)
除了Udo Fholl的回答:最大堆的正确参数ist -Xmx1024M
答案 2 :(得分:0)
Tomcat需要环境变量JAVA_OPTS。例如:
JAVA_OPTS="-XX:MaxPermSize=256m -Xms250m -Xmx650m"
答案 3 :(得分:-1)
-Xms=1024
表示起始内存为1024,但是当不需要时它缩小它。