Java中如何解决内存溢出(java.lang.OutOfMemoryError)呢?
下文笔者讲述Java代码处理内存溢出的方法及示例分享,如下所示
OutOfMemoryError异常的原因
1.内存中加载的数据量过于庞大 如: 一次从数据库取出过多数据; 2.集合类中有对对象的引用 使用完后未清空,使得JVM不能回收 3.代码中存在死循环或循环产生过多重复的对象实体 4.使用的第三方软件中的BUG 5.启动参数内存值设定的过小
OutOfMemoryError常见的错误提示
tomcat: java.lang.OutOfMemoryError: PermGen space weblogic: Root cause of ServletException java.lang.OutOfMemoryError tomcat: java.lang.OutOfMemoryError: Java heap space resin: java.lang.OutOfMemoryError java: java.lang.OutOfMemoryError
修复java.lang.OutOfMemoryError的方法
1.增加jvm的内存大小 方法有: 在运行某个class文件时 可使用java -Xmx256M aa.class来设置运行aa.class时jvm所允许占用的最大内存为256M 对tomcat容器,可以在启动时对jvm设置内存限度。对tomcat,可以在catalina.bat中添加: set CATALINA_OPTS=-Xms128M -Xmx256M set JAVA_OPTS=-Xms128M -Xmx256M 2.优化程序,释放垃圾 如:避免死循环 应该及时释放种资源: 内存,数据库的各种连接,防止一次载入太多数据
常见检查代码中可能导致OutOfMemoryError的方法
1.检查代码中是否有死循环或递归调用 2.检查是否有大循环重复产生新对象实体 3.检查对数据库查询中 是否有一次获得全部数据的查询 如果一次取十万条记录到内存,就可能引起内存溢出 对于数据查询,尽量采用分页的查询模式 5.检查list、MAP等集合对象是否有使用完后 未清除的问题 List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。