java常见的内存溢出及解决方法

引起内存溢出的常见原因大致有以下几种:

1.内存中加载的数据量过大,一次从数据库取出过多数据导致内存溢出; 2.集合类中有对对象的引用,使用完后没有及时清空,使得 JVM 不能回收; 3.代码中存在死循环或循环产生过多重复的实体对象; 4. 启动参数的内存值设定过小导致内存不够用;

常见内存溢出的解决方法:

第一步,修改 JVM 启动参数,直接增加内存。

第二步,检查错误日志,查看内存溢出错误前是否还有其它异常或错误。

第三步,查代码,找出可能发生内存溢出的位置。 重点排查以下几点: 1.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽且有潜伏性,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。所以可以使用分页查询数据库。 2.检查代码中是否有死循环或递归调用导致有大循环重复产生新对象实体。 3.检查 List、MAP 等集合对象是否有使用完后未清除的问题。集合中存在对对象的引用会导致这些对象不能被 GC 回收。

第四步,可以使用一些内存查看工具来动态查看内存的使用情况,快速定位内存溢出点。

你可能感兴趣的:(java,开发语言,后端)