1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Jprofiler监控工具(内存泄漏)

Jprofiler监控工具(内存泄漏)

时间:2024-05-03 21:16:53

相关推荐

Jprofiler监控工具(内存泄漏)

内存泄漏

1、测试代码

Java代码 /***JProfiler内存监控例子**@authoryhye*@-11-9上午09:46:06*/publicclassJProfilerMemMain{privateList<Integer>arr2=null;//方法执行完后无法释放Integer的数据内存publicvoidtest2(){arr2=test();}//方法执行完后释放Integer的数据内存publicList<Integer>test(){List<Integer>arr=newArrayList<Integer>();for(inti=0;i<200000;i++){arr.add(i*100);}returnarr;}publicstaticvoidmain(String[]args)throwsIOException{JProfilerMemMainjp=newJProfilerMemMain();for(inti=1;i<=10;i++){jp.test2();//jp.test();}System.out.println("程序执行完毕");//以下方法为保持程序处于活动状态charch='';while(ch!='n'){ch=ch;}}

2、查看步骤

启动JProfiler,等程序打印出"程序执行完毕" 后查看如下,Integer对象有800264

点击菜单上的按钮"Run GC" 执行垃圾回收后查看如下,Integer对象还有200270

说明未完全释放数据,查看对象在堆的快照

从以下视图可以看到该对象的arr2属性有数据未释放

①Heap Walker->Biggest Objects

②Heap Walker->References,JProfilerMemMain对象自身占用空间16bytes,引用其他对象占空间4288kB

③Heap Walker->Data,中arr2属性有数据占用空间

死锁

1、测试代码

Java代码 packagecom.yyh.base.jprofile;/***死锁例子*@authoryhye*@-11-8上午09:12:25*/publicclassDeadlockMainimplementsRunnable{booleanflag;staticObjecto1=newObject();staticObjecto2=newObject();publicvoidrun(){System.out.println(flag);if(flag){synchronized(o1){try{Thread.sleep(500);}catch(InterruptedExceptione){e.printStackTrace();}synchronized(o2){System.out.println("AAA");}}}else{synchronized(o2){try{Thread.sleep(500);}catch(InterruptedExceptione){e.printStackTrace();}synchronized(o1){System.out.println("BBB");}}}}publicstaticvoidmain(String[]args){DeadlockMainaaa=newDeadlockMain();DeadlockMainbbb=newDeadlockMain();aaa.flag=true;bbb.flag=false;ThreadthA=newThread(aaa);thA.setName("线程AAA");ThreadthB=newThread(bbb);thB.setName("线程BB");thA.start();thB.start();}}

2、查看步骤

启动JProfiler,等程序执行一段时间后查看如下,线程AAA和线程BB出现阻塞

查看Thread Views-> Thread Monitor

①线程AAA的调用方的类和方法

②线程BB的调用方的类和方法

查看ThreadViews-> Thread Dumps

①线程AAA的阻塞的代码位置

②线程BB的阻塞的代码位置

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。