<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MDA/MDD/TDD/DDD/DDDDDDD
    posts - 536, comments - 111, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    java內(nèi)存泄漏筆記

    Posted on 2009-01-14 14:18 leekiang 閱讀(6063) 評論(2)  編輯  收藏 所屬分類: java
    利用jdk6查內(nèi)存泄漏(見編寫對GC友好,又不泄漏的代碼)
    (1)jmap -dump:file=heap_file_name pid 會產(chǎn)生一個heap_file_name文件
    (2)jhat heap_file_name,然后打開瀏覽器http://localhost:7000/ 瀏覽。
    ?? 可看到里面顯示了運行的所有的類和實例及大小。平臺(例如tomcat)的不會包括在里面。
    (3)如果覺得不夠,還可以把heap_file_name文件加一個bin的后綴,然后讓Eclipse MAT來分析。看這里
    另外
    jps:與unix上的ps類似,用來顯示本地的java進程,可以查看本地運行著幾個java程序,并顯示他們的進程號。
    jinfo:的用處比較簡單,就是能輸出并修改運行時的java進程的運行參數(shù)。用法是jinfo -opt? pid 如:查看2788的MaxPerm大小可以用? jinfo -flag MaxPermSize 2788。
    jstat 也很有用,說明見這里


    3,
    SUN JDK所支持的典型選項以及說明:http: //java.sun.com/javase/technologies/hotspot/vmoptions.jsp 上面有很多選項
    -XX:-HeapDumpOnOutOfMemoryError 從jdk1.4.2 update 12 和java 5 update 7開始支持這個選項。

    4,
    關(guān)于jmap
    從JDK 5開始,SUN JDK開始提供JMap的工具。但是僅僅是實驗性質(zhì)的,而且只有在solaris平臺上有。
    后來Jmap被反向移植到j(luò)dk 1.4.2_09。因為是實驗性質(zhì),所以jmap可能會出現(xiàn)dump失敗的情況。
    但是自從JDK 6之后,jmap的穩(wěn)定性和可用性都沒問題了。請注意各個版本的jvm都要用自己版本的jmap,
    而jhat可以用于分析各個版本的jmap dump出來的文件。至于jhat用于分析1g以上的dump文件,
    我們有過多次在筆記本上的成功經(jīng)歷,它對內(nèi)存的要求可能并沒有那么高。
    http://space.itpub.net/27378/viewspace-521225

    5,J2SE6中使用jhat來分析內(nèi)存堆
    http://hi.baidu.com/tister/blog/item/e7374482f4341ca70cf4d2e8.html

    6,Java內(nèi)存溢出(OutOfMemory),內(nèi)存分析相關(guān)工具
    http://uglytroll.ycool.com/post.3046111.html

    7,JDK中的好工具 jmap、jhat
    http://wangzaixiang.blogspot.com/2008/10/jdk-jmapjhat.html
    http://hi.baidu.com/zeorliu/blog/item/4f38989413601719d21b70d5.html

    8,SAP貢獻給eclipse基金會的MemoryAnalyzer,原來叫Java Memory Analysis
    能分析幾G的Memory Dump而不會內(nèi)存溢出?
    http://www.eclipse.org/mat/
    可惜還是只支持jdk1.4.2 update 12 和java 5 update 7以上

    9,在一個方法里面的變量是不會引起內(nèi)存泄露的。
    內(nèi)存泄露都是發(fā)生在類變量和實例變量(且此實例被緩存、如單例模式)里。
    我建議你從HashMap、HashMap$Entry 入手查查。
    我也研究過一陣子的內(nèi)存泄露問題,最終解決了。
    http://www.javaeye.com/topic/233080

    10,你遇到的是最理想的情況,但有時候,這種方法不能找到原因,只找到造成崩潰的點.就好比,
    一個HTTP 請求,沒有設(shè)置超時(對不起,默認(rèn)是不超時,不知道為什么SUN要這樣設(shè)定),
    然后這條線程就卡在這里了,然后,這條線程里的一個堆棧被另一條線程放入內(nèi)容,
    本來這些內(nèi)容就是要這條閑線程去處理的,但是現(xiàn)在,這條線程卡住了,但是用你說的這種方法,
    絕對找不到造成內(nèi)存泄露的原因是因為http不超時,一直卡在那里.

    我還有一個笨辦法做精細(xì)的內(nèi)存分配比較:就是定期用pmap命令dump出來JVM進程的內(nèi)存映射表,然后diff。
    http://www.javaeye.com/topic/256701

    11,http://calvin.javaeye.com/blog/91903
    ?java 不是有垃圾收集器了嗎?怎么還泄漏啊,唬我啊??
    ?? 嗯,此泄漏非比泄漏。C/C++的泄漏,是對象已不可到達(dá),而內(nèi)存又沒有回收,真正的內(nèi)存黑洞。
    ?? 而Java的泄漏,則是因為各種原因,對象對應(yīng)用已經(jīng)無用,但一直被持有,一直可到達(dá)。
    ?? 總結(jié)原因無外乎幾方面:

    ?? 1). 被生命周期極長的集合類不當(dāng)持有,號稱是Java內(nèi)存泄漏的首因。
    ????? 這些集合類的生命周期通常極長,而且是一個輔助管理性質(zhì)的對象,在一個業(yè)務(wù)事務(wù)運行完后,如果沒有將某個業(yè)務(wù)對象主動的從中清除的話,這個集合就會吃越來越多內(nèi)存,可以用WeakReference,如WeakHashMap,使得它持有的對象不增加對象的引用數(shù)。
    ?? 2). Scope定義不對,這個很簡單了,方法的局部變量定義成類的變量,類的靜態(tài)變量等。
    ?? 3). 異常時沒有加finally{}來釋放某些資源,JDBC時代也是很普遍的事情。
    ?? 4). 另外一些我了解不深的原因,如:Swing里的Listener沒有顯式remove;內(nèi)部類持有外部對象的隱式引用;Finalizers造成關(guān)聯(lián)對象沒有被及時清空等。
    ?

    搭車
    我的SQL調(diào)優(yōu)公式T=S/V
    http://space.itpub.net/27378/viewspace-157789

    MetaWidget及SOA
    http://wangzaixiang.blogspot.com/2008/10/metawidget.html

    評論

    # re: java內(nèi)存泄漏筆記  回復(fù)  更多評論   

    2009-11-07 08:41 by 繁體字
    內(nèi)存泄漏 可真煩人! 查來查去,只查到string 類 暈死!

    # re: java內(nèi)存泄漏筆記  回復(fù)  更多評論   

    2010-03-24 14:21 by 繁體字轉(zhuǎn)換器
    Java的一個重要優(yōu)點就是通過垃圾收集器(Garbage Collection,GC)自動管理內(nèi)存的回收,程序員不需要通過調(diào)用函數(shù)來釋放內(nèi)存。
    主站蜘蛛池模板: 亚洲欧洲综合在线| sss日本免费完整版在线观看| 亚洲网站在线播放| 日本一区二区三区免费高清| 亚洲综合精品成人| 亚洲一区精品无码| 永久免费毛片在线播放| xxxxx做受大片视频免费| 亚洲精品一区二区三区四区乱码| 精品免费久久久久国产一区| 久久久亚洲精品国产| 野花高清在线观看免费完整版中文| 亚洲激情校园春色| 亚洲色偷偷综合亚洲AV伊人| 国产精品怡红院永久免费| 无码精品人妻一区二区三区免费 | 国产麻豆一精品一AV一免费| 久久精品国产亚洲AV麻豆网站| 久久香蕉国产线看免费| 亚洲A∨精品一区二区三区下载| 成人免费淫片在线费观看| 中文字幕在线视频免费观看| 亚洲精品美女在线观看| 久久精品亚洲乱码伦伦中文| 国产香蕉九九久久精品免费| 免费看成人AA片无码视频吃奶| 久久精品国产精品亚洲色婷婷| 美女视频黄的免费视频网页| 国产亚洲蜜芽精品久久| 亚洲午夜一区二区电影院| 国产亚洲精品成人AA片新蒲金| 两个人看的www免费高清| 亚洲欧洲免费无码| 亚洲电影唐人社一区二区| 国产AV无码专区亚洲AV毛网站| 最新黄色免费网站| 3344在线看片免费| 免费无码国产在线观国内自拍中文字幕 | 美女扒开屁股让男人桶爽免费| 亚洲精品99久久久久中文字幕 | 亚洲精品蜜夜内射|