日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jprofiler监控工具(内存泄漏)

發(fā)布時間:2025/3/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jprofiler监控工具(内存泄漏) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

  • 內(nèi)存泄漏

? ? 1、測試代碼

?

Java代碼 ?
  • /**?
  • ?*?JProfiler內(nèi)存監(jiān)控例子?
  • ?*??
  • ?*?@author?yhye?
  • ?*?@2011-11-9上午09:46:06?
  • ?*/??
  • public?class?JProfilerMemMain?{??
  • ??????
  • ????private?List<Integer>?arr2?=?null;??
  • ??
  • ????//?方法執(zhí)行完后無法釋放Integer的數(shù)據(jù)內(nèi)存??
  • ????public?void?test2()?{??
  • ????????arr2?=?test();??
  • ????}??
  • ??
  • ????//?方法執(zhí)行完后釋放Integer的數(shù)據(jù)內(nèi)存??
  • ????public?List<Integer>?test()?{??
  • ????????List<Integer>?arr?=?new?ArrayList<Integer>();??
  • ????????for?(int?i?=?0;?i?<?200000;?i++)?{??
  • ????????????arr.add(i?*?100);??
  • ????????}??
  • ????????return?arr;??
  • ????}??
  • ??
  • ????public?static?void?main(String[]?args)?throws?IOException?{??
  • ????????JProfilerMemMain?jp?=?new?JProfilerMemMain();??
  • ????????for?(int?i?=?1;?i?<=?10;?i++)?{??
  • ????????????jp.test2();??
  • ????????????//?jp.test();??
  • ????????}??
  • ????????System.out.println("程序執(zhí)行完畢");??
  • ????????//?以下方法為保持程序處于活動狀態(tài)??
  • ????????char?ch?=?'?';??
  • ????????while?(ch?!=?'n')?{??
  • ????????????ch?=?ch;??
  • ????????}??
  • ????}??
  • ??????
  • ?

    ?

    ?

    ? 2、查看步驟 ?

    ?

    ? ? 啟動JProfiler,等程序打印出"程序執(zhí)行完畢" 后查看如下,Integer對象有800264

    ?

    ? ??

    ?

    ?

    ? ?點擊菜單上的按鈕"Run GC" 執(zhí)行垃圾回收后查看如下,Integer對象還有200270

    ?

    ?

    ? ?說明未完全釋放數(shù)據(jù),查看對象在堆的快照


    從以下視圖可以看到該對象的arr2屬性有數(shù)據(jù)未釋放

    ?

    ?①Heap Walker->Biggest Objects


    ?

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

    ?

    ③Heap Walker->Data,中arr2屬性有數(shù)據(jù)占用空間


    ?

    ?

    • 死鎖

    ?

    ?1、測試代碼

    ?

    ?

    Java代碼 ?
  • package?com.yyh.base.jprofile;??
  • ??
  • /**?
  • ?*?死鎖例子?
  • ?*?@author?yhye?
  • ?*?@2011-11-8上午09:12:25?
  • ?*/??
  • public?class?DeadlockMain??implements?Runnable?{??
  • ????boolean?flag;??
  • ????static?Object?o1?=?new?Object();??
  • ????static?Object?o2?=?new?Object();??
  • ??
  • ????public?void?run()?{??
  • ????????System.out.println(flag);??
  • ????????if?(flag)?{??
  • ????????????synchronized?(o1)?{??
  • ????????????????try?{??
  • ????????????????????Thread.sleep(500);??
  • ????????????????}?catch?(InterruptedException?e)?{??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????????synchronized?(o2)?{??
  • ????????????????????System.out.println("AAA");??
  • ????????????????}??
  • ????????????}??
  • ??
  • ????????}?else?{??
  • ????????????synchronized?(o2)?{??
  • ????????????????try?{??
  • ????????????????????Thread.sleep(500);??
  • ????????????????}?catch?(InterruptedException?e)?{??
  • ????????????????????e.printStackTrace();??
  • ????????????????}??
  • ????????????????synchronized?(o1)?{??
  • ????????????????????System.out.println("BBB");??
  • ????????????????}??
  • ????????????}??
  • ??
  • ????????}??
  • ??
  • ????}??
  • ??????
  • ????public?static?void?main(String[]?args)?{??
  • ????????DeadlockMain?aaa?=?new?DeadlockMain();??
  • ????????DeadlockMain?bbb?=?new?DeadlockMain();??
  • ????????aaa.flag?=?true;??
  • ????????bbb.flag?=?false;??
  • ????????Thread?thA?=?new?Thread(aaa);??
  • ????????thA.setName("線程AAA");??
  • ??????????
  • ????????Thread?thB?=?new?Thread(bbb);??
  • ????????thB.setName("線程BB");??
  • ??????????
  • ????????thA.start();??
  • ????????thB.start();??
  • ????}??
  • }??
  • ? ?

    ?

    ?2、查看步驟 ?

    ?

    啟動JProfiler,等程序執(zhí)行一段時間后查看如下,線程AAA和線程BB出現(xiàn)阻塞

    ?


    ?

    查看Thread Views-> Thread? Monitor

    ?

    ①線程AAA的調(diào)用方的類和方法


    ②線程BB的調(diào)用方的類和方法

    查看Thread?Views-> Thread ?Dumps

    ?

    ①線程AAA的阻塞的代碼位置

    ②線程BB的阻塞的代碼位置


    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/zhengah/p/5012976.html

    總結(jié)

    以上是生活随笔為你收集整理的Jprofiler监控工具(内存泄漏)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。