#java基础 #java面试 #jvm #内存溢出
内存溢出就是我们通常遇到的 outofmemoryerror 异常。它俗理解就是内存不够,通常在运行大型程序时发生。当程序所需要的内存远远超出了 JVM 内存所承受大小,就会爆出 autofmemoryerror 异常称为 UI 异常。在我们的 JVM 内存区域中,可以点击链接了解详情。除了程序计数器所占的内存,其他的内存区域都有可能发生异常。当发生异常时,我们可以通过 jsack 工具和图形化工具 jc ansl 工具查询到发生异常的具体区域。
Java 的栈溢出比较好模拟,写一个无限递归的方法即可,虽然虚拟机规范定义了栈上内存可以出现 stackoverflow 和 outofmemory 两种异常,但实际上单线程是不会发生 oom 异常的,即使栈不深,而是因为每个方法申请的临时变量很多引起的栈内存超过 Xss。,如果要开大量的线程时,是有可能因为栈内存过大引 ?
myeclipse中java.lang.OutOfMemoryError:PermGenspace怎么解决?
解决方法是加大内存。
1、PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。
2、为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
3、解决方法: 手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m。
4、建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。
5、在tomcat中redeploy时出现outofmemory的错误. 可以有以下几个方面的原因: (1)使用了proxool,因为proxool内部包含了一个老版本的cglib。
(2)log4j,最好不用,只用common-logging。
(3)老版本的cglib,快点更新到最新版。