• Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式


    导致OutOfMemoryError异常的常见原因有以下几种:

    1. 内存中加载的数据量过于庞大,如一次从数据库取出过多数据
    2. 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收
    3. 代码中存在死循环或循环产生过多重复的对象实体
    4. 使用的第三方软件中的BUG;
    5. 启动参数内存值设定的过小

    此错误常见的错误提示:

    1. tomcat:java.lang.OutOfMemoryError: PermGen space
    2. weblogic:Root cause of ServletException java.lang.OutOfMemoryError
    3. tomcat:java.lang.OutOfMemoryError: Java heap space
    4. resin:java.lang.OutOfMemoryError
    5. 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)优化程序,释放垃圾。

        主要包括避免死循环,应该及时释放种资源:内存, 数据库的各种连接,防止一次载入太多的数据。

    Java代码导致OutOfMemoryError错误的解决:

    需要重点排查以下几点:

    1. 检查代码中是否有死循环或递归调用。
    2. 检查是否有大循环重复产生新对象实体。
    3. 检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
    4. 检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。

    参考Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结

  • 相关阅读:
    拓端tecdat|R语言JAGS贝叶斯回归模型分析博士生延期毕业完成论文时间
    拓端tecdat|数据感知游客的森林公园游憩需求
    空间100%
    uniq -c 去掉重复行
    工作中实用的Shell脚本实例
    Linux下如何解压和压缩rar格式的包
    LRM-00109: could not open parameter file
    Xmanager5 Passive oracle图形化界面出来之后鼠标点不了
    谷歌浏览器请求返回JSON内容自动格式化
    JENKINS中创建全局变量并在JOB中使用
  • 原文地址:https://www.cnblogs.com/toria/p/11153982.html
Copyright © 2020-2023  润新知