jvm 内存泄露排查(visual vm)
jvm 内存泄露排查(visual vm)
内存泄露:对象使用结束,对象所占用的内存空间在垃圾收集的时候却不被回收
原因:对象被长生命周期的变量引用,如static变量
后果:如果大量的对象使用结束却无法回收,就用可能造成内存溢出(无法为新的对象分配内存)
#
***************************
示例
class MyObject{
private int _1m=1024*1024;
private byte[] b;
public MyObject(){
this.b=new byte[_1m];
}
}
public class Test11 {
private static List<MyObject> list=new ArrayList<>();
public static void main(String[] args) throws Exception {
for (int i=0;i<1000;i++){
list.add(new MyObject());
System.out.println("add "+i);
try{
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
}
System.out.println(list);
}
}
说明:循环体内创建的对象添加进list中,list为全局变量,方法运行结束后对象也不会被释放,造成内存泄露
********************
控制台输出
虚拟机参数:-Xms500m -Xmx500m
。。。
add 240
add 241
add 242
add 243
add 244
add 245
add 246
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at runtime.MyObject.<init>(Test11.java:12)
at runtime.Test11.main(Test11.java:22)
说明:循环体内创建的对象myObject无法释放,造成内存溢出
***************************
visual vm 内存泄露排查
visual gc标签
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzMTYyNQ_size_16_color_FFFFFF_t_70][]
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzMTYyNQ_size_16_color_FFFFFF_t_70 1][]
前后运行期间,老年代使用的空间逐渐增大,最终内存溢出,判断可能造成内存泄露
sampler:heap dump,之后一段时间再执行一次 heap dump
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzMTYyNQ_size_16_color_FFFFFF_t_70 2][]
前后两次 heap dump比较
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzMTYyNQ_size_16_color_FFFFFF_t_70 3][]
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzMTYyNQ_size_16_color_FFFFFF_t_70 4][]
对比发现,MyObject对象明显增多
myObject ==》 open in new tab
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzMTYyNQ_size_16_color_FFFFFF_t_70 5][]
myObject references
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzMTYyNQ_size_16_color_FFFFFF_t_70 6][]
内存泄露对象在arrayList链表中
还没有评论,来说两句吧...