项目中遇到这么个异常:
java.lang.OutOfMemoryError: PermGen space
由于项目中使用了自定义的ClassLoader,用于加载不同版本的JAR包,每启一个线程都要使用单独的ClassLoader,线程多了ClassLoader当然也就多了,于是首当其冲就怀疑很可能是由于加载class过多导致的,因为虚拟机加载的class是从来不会释放的。
于是请教万能的谷兄,果不其然,且看一段解释:
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
原来,正是由于每个ClassLoader加载的class都留在了PermGen space这个区域,而启的线程越多,加载的class也越多,造成很多class被重复加载,于是对PermGen space的占用呈几何级增长,溢出成为必然。
症结找到了,下面就要解决了:每个线程使用的ClassLoader并非完全没有雷同,实际上所有线程使用的ClassLoader也就那么几个是不同的,其他的都是这个几个的“拷贝”,因此,只要将这几个不同的ClassLoader实现复用,不就OK了吗?是的,然后同类型的线程使用同一个ClassLoader就行了,这样就不会重复加载相同的class了,问题解决了。
分享到:
相关推荐
Caused by: java.lang.OutOfMemoryError: PermGen space解决方案, avax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space at org.apache.jasper.servlet.JspServlet.service(JspServlet.java...
java.lang.OutOfMemoryError: PermGen space 解决方案
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
java.lang.OutOfMemoryError: PermGen space及其解决方法,解决项目太大tomcat内存溢出
报错 java.lang.OutOfMemoryError: PermGen space 报错 java.lang.OutOfMemoryError: Java heap 启动报错java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler JAVA_OPTS="-server -Xms800m ...
java.lang.OutOfMemoryError: PermGen space
Eclipse中通过Tomcat运行J2EE项目java.lang.OutOfMemoryError PermGen space的解决方案
关于内存溢出报错的处理及解决方案: java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemory 堆内存、非堆内存都描述
1. Java heap space 2. GC overhead limit exceeded 3. Permgen space 5. Unable to c
java.lang.OutOfMemoryError: PermGen space,OutOfMemoryError是内存溢出1、weblogic域的bin目录
更低版本的JDK7可能需要设置Java内存-XX:PermSize=128M -XX:MaxPermSize=512M,否则可能出现这种类型的内存溢出:java.lang.OutOfMemoryError: PermGen space。 Servlet3.0或更高版本(如Tomcat7或更高版本)。 ...
OutOfMemoryError的8种经典案例,Java heap space、GC overhead limit exceeded、Permgen space、Metaspace、Unable to create new native thread、Out of swap space?、Requested array size exceeds VM limit、...
更低版本的JDK6、JDK7可能需要设置Java内存-XX:PermSize=128M -XX:MaxPermSize=512M,否则可能出现这种类型的内存溢出:java.lang.OutOfMemoryError: PermGen space。 Servlet2.5或更高版本(如Tomcat6或更高版本)...
更低版本的JDK6、JDK7可能需要设置Java内存-XX:PermSize=128M -XX:MaxPermSize=512M,否则可能出现这种类型的内存溢出:java.lang.OutOfMemoryError: PermGen space。 Servlet2.5或更高版本(如Tomcat6或更高版本)。...
-XX:MaxPermSize=512M,否则可能出现这种类型的内存溢出:java.lang.OutOfMemoryError: PermGen space。 Servlet3.0或更高版本(如Tomcat7或更高版本)。 MySQL5.5或更高版本(如需使用MySQL5.0,可将mysql驱动版本...
JSP安装运行步骤及遇错处理方法,包括安装JDBC步骤、安装Tomcat...java.lang.OutOfMemoryError: PermGen space;tomcat 5.5 的The Apache Tomcat Native library which allows optimal performance 的解决方法等等..
昨天遇到一个线上系统报 java.lang.OutOfMemoryError: PermGen space 错误,需要定位一下问题。很久之前到时弄过这个,现在还真有点不记得了,但这个真的是一个非常有意思的问题,值得好好研究一下。 首先第一...
我自己做项目中遇到了不少问题,现将其解决方法共享,大家探讨下: (1)解决MYSQL乱码问题 (2)传递参数中文乱码 (3)jsp导包问题 (4)Hibernate基于外键的查询方法 ...(6)分析java.lang.OutOfMemoryError PermGen space
如果您想避免可怕的java.lang.OutOfMemoryError: Metaspace / PermGen space ,只需将此库包含到您的 Java EE 应用程序中,它就会处理剩下的事情! 要了解有关类加载器泄漏、其原因、类型、找到它们的方法和已知违规...