相信大家都见过这么一个错误,这个错误的原因是啥呢?
首先可以确定的是: jvm运行过程中出现的问题-内存溢出,出现的原因大致可以分为4个:
(1) 程序运行过程中加载了庞大的数据资源,例如一次性要读取数据库中很多的数据,导致还没有读取完整就内存溢出了;
(2) 集合中有对大量对象的引用,使用完成后没有及时释放对象(清空对象),导致垃圾回收器没有办法去回收这些对象,导致内存溢出;
(3) 程序使用了死循环或者循环中产生了大量的对象实体,越积越多,导致内存溢出;
(4) jvm内存参数设置的太小
解决办法: 首先需要定位内存溢出出现的位置,这里介绍一种java 内存检测工具-mat
(1)首先我们需要对执行的程序设置参数,可以让虚拟机在出现溢出内存异常时Dump出当前的内存堆转储快照以便时候进行分析;
下来使用这些参数来执行你的程序,当出现内存溢出时,会在项目中出现一个xxx.hprof的文件
在使用java memory analyzer(mat)工具打开这个文件
从分析表可以看出是因为list集合add对象内存溢出了,也可以看到对象是com.hjb.java_base.section02.jvm.Bean