java内存溢出如何排查

排查的流程

1、修改JVM启动参数,然后直接增加内存。

2、检查错误日志。

3、对代码进行走查和分析,找出内存溢出的可能性。

排查的注意点,

(1)内存中加载的数据太多,例如一次从数据库中取出太多数据;

(2)集合类有对象引用,使用后未清空,使JVM无法回收;

(3)代码中存在死循环或循环产生过多重复的物体;

(4)使用的第三方软件中的错误;

(5)启动参数内存值设置过小。

排查后的解决办法

检查代码中是否有死循环或递归调用。

检查是否有循环重复产生新对象实体。

检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询可能就会引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

检查List、Map等集合对象是否使用完未清除的问题,List、Map等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。

检查对大文件的读取是否采用nio的方式。

java方法重载的无效探究:重载无效1、当谈论参数列表时,不讨论方法的返回类型。2、如果两种方法有相同的名称、相同的参数和不同的返回类型,那么这不是一种有效的方法重载,将导致编译错误。int add(int, int)float add(i ...