开发者社区> 问答> 正文

总是报错:java.lang.OutOfMemoryError: PermGen space?报错

做一个springmvc+mybatis的项目,在重新部署的时候经常报错:java.lang.OutOfMemoryError: PermGen space

然后在网上找了很多方法,对tomcat的做了修改:修改TOMCAT_HOME/bin/catalina.bat
在# OS specific support. $var _must_ be set to either true or false.上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128M"

但是还是经常出现这个问题:java.lang.OutOfMemoryError: PermGen space求大神指点一下,在下感激不尽!


展开
收起
爱吃鱼的程序员 2020-06-08 19:39:29 409 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    分析一下是什么原因。查看一下堆栈。

    <spanstyle="font-size:10pt;">修改eclipse和tomcat的内存设置,都不行话就在eclipse中jdk的defaultVMarguments添加如下-Xms128m-Xmx1024m-XX:PermSize=128m-XX:MaxPermSize=1024m 试试

    <spanstyle="font-size:10pt;"><imgsrc="https://static.oschina.net/uploads/space/2017/0103/130826_l4co_3167892.png"alt="">

    <spanstyle="font-size:13.3333px;">建议你将permSize弄大点,或者使用jrockitjvm(如果你的cpu是intel的话),这部分内存溢出并不一定说明你程序写的不好,PermGenspace是存放你的类的元信息的地方,就是存放类的描述信息的地方,这块区域是不会被gc的,所以如果你用到的类特别多的话,这里就会溢出。也<spanstyle="font-size:13.3333px;">有可能是因为你在程序中大量的使用运行时生成的类而引起的,像cglig,asm,javassist这些都是基于代理来工作,会在程序的运行中产生很多"xxx$$xxxxx"这样的类(当然名字也有可能是别的样子的,这里只是举例子),这些类的描述信息就会存在那块区域,sun自己的jvm是不gc那里的,jrockitjvm会。经常出现的话~~~~你确定你们的代码没有问题吗?非堆内存溢出 配置下非堆内存就可以了 因为默认的是你的内存的1/64 所以你想想这个是多大 肯定不够用的 上面的答案说的都是对的,你也可以用java自带的visualVM或者jconsole来监控一下你的tomcat,看看是什么情况下,导致了内存溢出ps:tomcat加jvm的配置最好的方法是在bin目录下价格setenv.sh的文件,把jvmopts放在里面

    PermSize溢出可以确定90%以上的可能性是你的代码问题。

    上面一堆说调参数的那都是治标不治本的做法。

    换JDK8最省心

    tomcat运行环境加上

    -Xms512M-Xmx1024M-XX:PermSize=512m-XX:MaxPermSize=1024m

    2020-06-08 19:39:40
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载