如何解决java.lang.OutOfMemoryError?
常见的有以下几种:
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.使用的第三方软件中的BUG;
5.启动参数内存值设定的过小;
解决方法:
JVM申请的heap会占用相同大小的地址空间(address space)。在Windows 32位操作系统中,分配给每个程序的地址空间只有2GB(当然也有3GB的开关)。而每个不同的JVM的堆和其创建的进程栈都依赖于同一个进程地址空间,所以这也是此消彼长的原因。有方法可以提高创建线程的数量: 减少单个线程栈的大小,在JVM启动中使用-Xss参数。
PermGen space是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。主要原因是class文件太多或者lib下的jar文件太多。
因为,我们只需要手动改变tomcat启动时的MaxPermSize和PermSize
在tomcat的bin目录下找到catalina.sh
找到echo "Using CATALINA_BASE: $CATALINA_BASE"这一行
在上面加入;JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=256m"
调节里面的参数。