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回收。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


