国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

MemoryAnalyzer補(bǔ)充

zhunjiee / 1355人閱讀

摘要:如果說一個(gè)對(duì)象已經(jīng)不被任何程序邏輯所需要但是還存在被根元素引用的情況,我們可以說這里存在內(nèi)存泄露。圖內(nèi)存消耗聚集對(duì)象信息在這張圖上,我們可以清楚的看到,這個(gè)對(duì)象集合中保存了大量對(duì)象的引用,就是它導(dǎo)致的內(nèi)存泄露。

首先,之前在網(wǎng)上下載的是Myeclipse的插件 --memory analyzer,在網(wǎng)站的下面是Memory Analyzer的單機(jī)版,單機(jī)版安裝簡(jiǎn)單,適合日常操作。下載地址:http://www.eclipse.org/mat/do...
之前一直糾結(jié)如何獲取一個(gè)Java項(xiàng)目的內(nèi)存分析的hprof文件,網(wǎng)上找了很多博客都是一筆帶過(這個(gè)很容易??。詈罂赡苁撬阉髑‘?dāng),用JVM指令:

jmap -dump:format=b,file=文件名.hprof[pid]

導(dǎo)出內(nèi)存信息文件,然后利用Memory Analyzer工具打開進(jìn)行內(nèi)存分析(對(duì)于內(nèi)存泄露,OOM等分析有很大的幫助)。

分析三步曲

通常我們都會(huì)采用下面的“三步曲”來分析內(nèi)存泄露問題:

首先,對(duì)問題發(fā)生時(shí)刻的系統(tǒng)內(nèi)存狀態(tài)獲取一個(gè)整體印象。

第二步,找到最有可能導(dǎo)致內(nèi)存泄露的元兇,通常也就是消耗內(nèi)存最多的對(duì)象

接下來,進(jìn)一步去查看這個(gè)內(nèi)存消耗大戶的具體情況,看看是否有什么異常的行為

下面將用一個(gè)基本的例子來展示如何采用“三步曲”來查看生產(chǎn)的分析報(bào)告。

查看報(bào)告之一:內(nèi)存消耗的整體狀況

圖 7. 內(nèi)存泄露分析報(bào)告

如圖 7 所示,在報(bào)告上最醒目的就是一張簡(jiǎn)潔明了的餅圖,從圖上我們可以清晰地看到一個(gè)可疑對(duì)象消耗了系統(tǒng) 99% 的內(nèi)存。在圖的下方還有對(duì)這個(gè)可疑對(duì)象的進(jìn)一步描述。我們可以看到內(nèi)存是由java.util.Vectorcom.ibm.oti.vm.BootstrapClassLoader 負(fù)責(zé)這個(gè)對(duì)象的加載。這段描述非常短,但我相信您已經(jīng)可以從中找到很多線索了,比如是哪個(gè)類占用了絕大多數(shù)的內(nèi)存,它屬于哪個(gè)組件等等。
接下來,我們應(yīng)該進(jìn)一步去分析問題,為什么一個(gè) Vector 會(huì)占據(jù)了系統(tǒng) 99% 的內(nèi)存,誰(shuí)阻止了垃圾回收機(jī)制對(duì)它的回收。

查看報(bào)告之二:分析問題的所在

首先我們簡(jiǎn)單回顧下 JAVA 的內(nèi)存回收機(jī)制,內(nèi)存空間中垃圾回收的工作由垃圾回收器 (Garbage Collector,GC) 完成的,它的核心思想是:對(duì)虛擬機(jī)可用內(nèi)存空間,即堆空間中的對(duì)象進(jìn)行識(shí)別,如果對(duì)象正在被引用,那么稱其為存活對(duì)象,反之,如果對(duì)象不再被引用,則為垃圾對(duì)象,可以回收其占據(jù)的空間,用于再分配。
在垃圾回收機(jī)制中有一組元素被稱為根元素集合,它們是一組被虛擬機(jī)直接引用的對(duì)象,比如,正在運(yùn)行的線程對(duì)象,系統(tǒng)調(diào)用棧里面的對(duì)象以及被 system class loader 所加載的那些對(duì)象。堆空間中的每個(gè)對(duì)象都是由一個(gè)根元素為起點(diǎn)被層層調(diào)用的。因此,一個(gè)對(duì)象還被某一個(gè)存活的根元素所引用,就會(huì)被認(rèn)為是存活對(duì)象,不能被回收,進(jìn)行內(nèi)存釋放。因此,我們可以通過分析一個(gè)對(duì)象到根元素的引用路徑來分析為什么該對(duì)象不能被順利回收。如果說一個(gè)對(duì)象已經(jīng)不被任何程序邏輯所需要但是還存在被根元素引用的情況,我們可以說這里存在內(nèi)存泄露。
現(xiàn)在,讓我們開始真正的尋找內(nèi)存泄露之旅,點(diǎn)擊“Details ”鏈接,可以看到如圖 8 所示對(duì)可疑對(duì)象 1 的詳細(xì)分析報(bào)告。
圖 8. 可疑對(duì)象 1 的詳細(xì)分析報(bào)告

我們查看下從 GC 根元素到內(nèi)存消耗聚集點(diǎn)的最短路徑:
圖 9. 從根元素到內(nèi)存消耗聚集點(diǎn)的最短路徑

我們可以很清楚的看到整個(gè)引用鏈,內(nèi)存聚集點(diǎn)是一個(gè)擁有大量對(duì)象的集合,如果你對(duì)代碼比較熟悉的話,相信這些信息應(yīng)該能給你提供一些找到內(nèi)存泄露的思路了。
接下來,我們?cè)倮^續(xù)看看,這個(gè)對(duì)象集合里到底存放了什么,為什么會(huì)消耗掉如此多的內(nèi)存。
圖 10. 內(nèi)存消耗聚集對(duì)象信息

在這張圖上,我們可以清楚的看到,這個(gè)對(duì)象集合中保存了大量 Person 對(duì)象的引用,就是它導(dǎo)致的內(nèi)存泄露。
至此,我們已經(jīng)擁有了足夠的信息去尋找泄露點(diǎn),回到代碼,我們發(fā)現(xiàn),是下面的代碼導(dǎo)致了內(nèi)存泄露 :
清單 1. 內(nèi)存泄漏的代碼段

while (1<2) 
{ 
            
    Person person = new Person("name","address",i); 
    v.add(person); 
    person = null; 
}
總結(jié)

從上面的例子我們可以看到用 MAT 來進(jìn)行堆轉(zhuǎn)儲(chǔ)文件分析,尋找內(nèi)存泄露非常簡(jiǎn)單,尤其是對(duì)于新手而言,這是一個(gè)很好的輔助分析工具。但是,MAT 絕對(duì)不僅僅是一個(gè)“傻瓜式”內(nèi)存分析工具,它還提供很多高級(jí)功能,比如 MAT 支持用 OQL(Object Query Language)對(duì) heap dump 中的對(duì)象進(jìn)行查詢,支持對(duì)線程的分析等,有關(guān)這些功能的使用可以參考 MAT 的幫助文檔。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/71414.html

相關(guān)文章

  • 關(guān)于Myeclipse2017 MemoryAnalyzer的安裝

    最近想要安裝MemoryAnalyzer(MAT)這個(gè)性能分析工具的插件,本以為網(wǎng)上教程那么多,教我一個(gè)技術(shù)一般的人足夠了,我安裝的是Myeclipse2017,可是在網(wǎng)上翻了一圈,大多數(shù)的Myeclipse教程都是10版本的,我呢,不想在論壇上問(沒耐心...),突然想到了自己當(dāng)初裝svn插件時(shí)的事情,類比一下是不是也可以呢?步驟如下:首先下載MemoryAnalyzer插件(這個(gè)一樣)http...

    CompileYouth 評(píng)論0 收藏0
  • 如何使用和安裝eclipse 的 memory analyzer工具(java內(nèi)存分析工具)

    摘要:注本人剛接觸這東西時(shí),走了很多彎路,并且不知道怎么解決。最后自己瞎搞,搞出來了,在這里給剛接觸的人寫個(gè)簡(jiǎn)單提示,以免浪費(fèi)時(shí)間,查找解決方案 本文章是寫給那些在eclipse上安裝了Memory analyzer工具但是確無(wú)法正常使用工具的人看的 如果你無(wú)法在eclipse上直接使用該工具,那么可以到http://www.eclipse.org/mat/do... 上面下載相對(duì)應(yīng)的 st...

    tunny 評(píng)論0 收藏0
  • 性能優(yōu)化(三)看完這篇文章,至少解決 APP 中 90 % 的內(nèi)存異常問題

    摘要:不能滿足被回收的條件,盡管調(diào)用也還是不能得到回收這就造成了內(nèi)存泄漏。種解決單例中的內(nèi)存泄漏將引用置為銷毀監(jiān)聽使用弱引用將監(jiān)聽器放入弱引用中從弱引用中取出回調(diào)通過第七小點(diǎn)就能完美的解決單例中回調(diào)引起的內(nèi)存泄漏。我們?yōu)槭裁匆獌?yōu)化內(nèi)存 showImg(https://user-gold-cdn.xitu.io/2019/5/12/16aac64e31d8c501); 在 Android 中我們寫的...

    Elle 評(píng)論0 收藏0
  • 一個(gè)基于vue和element-ui的樹形穿梭框組件

    摘要:在市面上找到一個(gè)好用的樹形穿梭框組件都很難,又不想僅僅因?yàn)橐粋€(gè)穿梭框在之外引入其他重量級(jí)插件,因此就有了。版本增加穿梭框左側(cè)右側(cè)數(shù)據(jù)勾選事件,穿梭框左側(cè)右側(cè)底部。 el-tree-transfer 簡(jiǎn)介·請(qǐng)先閱讀文檔及版本說明 因?yàn)楣緲I(yè)務(wù)使用vue框架,ui庫(kù)使用的element-ui。在市面上找到一個(gè)好用的vue樹形穿梭框組件都很難,又不想僅僅因?yàn)橐粋€(gè)穿梭框在element-ui之...

    Corwien 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<