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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyEclipse Profile 结合visualvm 监控内存泄露

發布時間:2025/3/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyEclipse Profile 结合visualvm 监控内存泄露 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
VisualVM是集成了多個JDK命令工具的一個可視化工具,它主要用來監控JVM的運行情況,可以用它來查看和瀏覽Heap Dump、Thread Dump、內存對象實例情況、GC執行情況、CPU消耗以及類的裝載情況。在JDK Update7之后,VisualVM作為JDK的一部分發布,但同時VisualVM也發布獨立的版本。VisualVM必須運行在JDK1.6以上的VM環境下,但可以用它來監控JDK1.4以上的JVM。
??? 1:創建java工程VisualvmTest,寫一個消耗內存的測試代碼:
Java代碼 ?
  • public?class?MemoryLeak?{ ??
  • ??
  • ????public?static?void?main(String[]?args)?throws?InterruptedException?{ ??
  • ??
  • ????????int?MAX_CONSUMERS?=?10000; ??
  • ????????int?SLEEP_BETWEEN_ALLOCS?=?5; ??
  • ??
  • ????????ConsumerContainer?objectHolder?=?new?ConsumerContainer(); ??
  • ??
  • ????????while?(objectHolder.size()?<?MAX_CONSUMERS)?{ ??
  • ????????????System.out.println("Allocating?object?"??
  • ????????????????????+?Integer.toString(objectHolder.size())); ??
  • ????????????objectHolder.add(new?MemoryConsumer()); ??
  • ????????????try?{ ??
  • ????????????????Thread.currentThread().sleep(SLEEP_BETWEEN_ALLOCS); ??
  • ????????????}?catch?(InterruptedException?ie)?{ ??
  • ????????????????//?Do?nothing. ??
  • ????????????} ??
  • ????????}?//?while. ??
  • ??
  • ????????Thread.sleep(1000*60*60); ??
  • ????}?//?main. ??
  • ??
  • }?//?End?of?MemoryLeak. ??
  • ??
  • class?ConsumerContainer?extends?Vector?{ ??
  • } ??
  • ??
  • class?MemoryConsumer?{ ??
  • ????public?static?final?int?MEMORY_BLOCK?=?1024; ??
  • ????public?byte[]?memoryHoldingArray; ??
  • ??
  • ????MemoryConsumer()?{ ??
  • ????????memoryHoldingArray?=?new?byte[MEMORY_BLOCK]; ??
  • ????} ??
  • }?//?End?MemoryConsumer.??
  • public class MemoryLeak {public static void main(String[] args) throws InterruptedException {int MAX_CONSUMERS = 10000;int SLEEP_BETWEEN_ALLOCS = 5;ConsumerContainer objectHolder = new ConsumerContainer();while (objectHolder.size() < MAX_CONSUMERS) {System.out.println("Allocating object "+ Integer.toString(objectHolder.size()));objectHolder.add(new MemoryConsumer());try {Thread.currentThread().sleep(SLEEP_BETWEEN_ALLOCS);} catch (InterruptedException ie) {// Do nothing.}} // while.Thread.sleep(1000*60*60);} // main.} // End of MemoryLeak.class ConsumerContainer extends Vector { }class MemoryConsumer {public static final int MEMORY_BLOCK = 1024;public byte[] memoryHoldingArray;MemoryConsumer() {memoryHoldingArray = new byte[MEMORY_BLOCK];} } // End MemoryConsumer.

    2:在MemoryLeak.java右鍵菜單選擇【Profile As】->【Java Application】,在彈出如下窗口,選擇【memory】.

    3:程序開始啟動運行,同時彈出visualvm窗口,如下圖,【profile】tab可以看到對象大小比例。【監控】可以看到對的運行走向。

    4:可以發現byte數組暫用比較大。在byte[]右鍵菜單選擇【生成快照并顯示棧分配跟蹤】。能夠快速定位在什么地方消耗比較大的內存,能夠快速解決問題:



    參考資料: VisualVM遠程監控

    總結

    以上是生活随笔為你收集整理的MyEclipse Profile 结合visualvm 监控内存泄露的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。