文章目录
- Java内存为什么会泄露?
- java内存泄露的排查思路
Java内存为什么会泄露?
Java内存泄露(Memory Leak)是指在Java程序中,无用的对象占用了堆内存
,但无法被垃圾回收器回收释放,从而导致可用内存逐渐减少,最终可能导致内存耗尽或性能下降的问题。
说明一般对于内存泄漏。都是针对堆
的。
java内存泄露的排查思路
程序一般出现内存泄漏会有两个状态
- 一是一启动导致堆空间满了,就直接会闪退,无运行状态
- 二是程序启动了,但是在程序运行途中堆空间满了,然后宕机
排查方法包括三步:
- 获取堆内存快照dump
1、通过jmap指定打印他的内存快照dump(Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中)
2、使用vm参数获取dump文件(可以指定生成dump文件的文件目录)
有的情况是内存溢出之后程序则会直接中断,而jmap只能打印在运行中的程序,所以建议通过参数的方式的生成dump文件
-
VisualVM去分析dump文件
-
通过查看堆信息的情况,定位内存溢出问题