建设银行网站无法访问千瓜数据
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 spaceat runtime.MyObject.<init>(Test11.java:12)at runtime.Test11.main(Test11.java:22)
说明:循环体内创建的对象myObject无法释放,造成内存溢出
***************************
visual vm 内存泄露排查
visual gc标签
前后运行期间,老年代使用的空间逐渐增大,最终内存溢出,判断可能造成内存泄露
sampler:heap dump,之后一段时间再执行一次 heap dump
前后两次 heap dump比较
对比发现,MyObject对象明显增多
myObject ==》 open in new tab
myObject references
内存泄露对象在arrayList链表中