java.lang.OutOfMemoryError: PermGen space
PermGen space的全称是Permanent Generation space
是指内存的永久保存区域, 该区域被JVM用来存放Class和Meta信息, 该区域默认大小约是4M,并且JVM圾圾回收机不会在运行期对该区域进行清理.随着应用载入的class越来越多(这些class包括所有来自lib包中引入的jar), 当该区域不够用时,将抛出PermGen space错误,这个时候就应该手动设置Perm Size的值, 如: JAVA_OPTS='-XX:PermSize=64m -XX:MaxPermSize=128m', 这个错误经常发生在应用启动时,如tomcat中运行过多应用,并且每个应用都包含相当多的lib包时,就可能发生该错误,因为每个应用lib包中的class载入时都会占用该区域一定的内存,即使这些应用包含相同的jar,当这些jar中的class载入时仍可能占用不同的内存区域,所以调整PermSize大小就是一个选择,另一个不错的办法就是将应用中相同的jar包移动到tomcat的lib目录中,这可以减少Perm区域的内存占用.
java.lang.OutOfMemoryError:Java heap space
JVM堆的内存区域,该区域是一个运行时数据区, 用于分配类的对象, 如我们new出来的实例对象.该区域可由运行时垃圾回收机清理, JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。当我们在程序运行期间产生的实例对象越来越多,而这些对象又没有得到及时清理时, 直到这些对象占据到接近-Xmx的设置值时就会抛出该错误.
举个例子,如我们在web应用的session中保存了太多信息(session保存于服务器内存中),随着用户的增多,每个用户都分别占用着一定的内存,当同时在线的用户增加到一定程度时,就可能抛出该内存溢出错误, 这个时候最直接的解决办法就是设置-Xmx的大小(一般建议-Xms与-Xmx设置一样大),另一个就是检查你的session中是否存放了太多不必要的信息. 该错误还经常发生在很多后台线程中,为了处理一些大数据量的东西,我们经常会在系统中创建一些定时任务,这些定时任务可能会较长时间占据着系统的大量内存,随着任务越来越多,这些线程就可能在不知不觉中引起内存溢出错误!
相关推荐
描述java内存回收机制,异常出现原因,解决方案
基于ARM架构的Linux内存异常处理 MMU原理 权限控制 page分配
银河麒麟操作系统 内存异常占用 bug修复补丁包 , 解决服务器在未使用状态下,内存占用满的问题
安装Oracle 出现物理内存异常的处理方法
内存异常故障排除法.docx
六种内存异常故障解决办法
改进型March算法在内存异常检测中的应用,那个要10分太坑了。。。看的时候用cajviewer
银河麒麟(RAM64),内存异常修复包。适用于银河麒麟出现内存异常不下降的情况使用。
【ASP.NET编程知识】.Net程序内存异常的原因及解决.docx
主要给大家介绍了关于一次django内存异常排查记解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用django具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
内存出现异常的几种故障及其处理方法
主要介绍了 Java中内存异常StackOverflowError与OutOfMemoryError详解的相关资料,需要的朋友可以参考下
开发技术-硬件
此固件适用于联想Thinksystem SR550/SR650等双路服务器,解决机器使用非联想原厂内存报错的关键性问题,刷此固件后,市场上的所有内存均可正常使用,无警告报错信息;通过管理口默认ip:192.168.70.125登入刷此固件...
由于电脑的配置我们在运行项目的时候经常会遇到,由于系统内存不足引起的异常,这里是处理这种异常的方法,由我个人整理,希望能够帮到你。
内存出现异常怎么办.docx
JVM实战-对象访问与内存溢出异常解析
背景:很多情况下程序崩溃我们只能看到程序抛出来的异常信息,但是有时候异常信息不清不楚我们处理异常还是一头雾水,这种情况下我们就很希望能有种办法获取程序运行时的内存进行调试,查看其中的变量、参数、方法...