java内存溢出分析方法

1.java内存分为堆内存和非堆内存。

非堆内存指的是加载class文件所使用的内存,使用permsize相关参数可以配置其大小,一般程序使用几百兆就足够了;

堆内存是垃圾回收器负责回收的内存,分为新生代和老年代,一般内存溢出问题都是老年代内存持续增大,无法回收导致。新生代内存中的对象一般都是朝生夕死的,很快就可以被回收,如果新生代中对象的生命周期过长、或对象过大时,新生代对象会转移到老年代中。

2.可以使用jconsole工具查看内存使用情况。

3.如果程序运行不稳定,可以通过生成dump文件分析内存中大量存在的类对象,进而分析程序哪里写的不合理。分析dump文件工具可使用eclipse的memory analyzer。

dump文件生成命令:jmap -dump:format=b,file=文件名 [pid]

一般导致内存溢出的原因:

1)数据库查询语句没有动态传参;

2)导出excel文件未使用流写入方式;

3)使用static变量导致对象无法回收

猜你喜欢

转载自blog.csdn.net/u014161595/article/details/52849250
今日推荐