轉(zhuǎn)載:使用 Eclipse Memory Analyzer 進(jìn)行堆轉(zhuǎn)儲(chǔ)文件分析

使用 Eclipse Memory Analyzer 進(jìn)行堆轉(zhuǎn)儲(chǔ)文件分析

Eclipse Memory Analyzer(MAT)是著名的跨平臺(tái)集成開發(fā)環(huán)境 Eclipse Galileo 版本的 33 個(gè)組成項(xiàng)目中之一,它是一個(gè)功能豐富的 JAVA 堆轉(zhuǎn)儲(chǔ)文件分析工具精绎,可以幫助你發(fā)現(xiàn)內(nèi)存漏洞和減少內(nèi)存消耗锌妻。本文主要介紹如何安裝配置 Memory Analyzer,并結(jié)合一個(gè)實(shí)例搁吓,介紹如何利用 MAT 來進(jìn)行堆轉(zhuǎn)儲(chǔ)文件分析吭历,找到內(nèi)存泄露的根源毒涧。
0[圖片上傳中。仿吞。捡偏。(3)] 評(píng)論

仇 璐, 軟件工程師, IBM
楊 曉峰, 軟件工程師, IBM
2010 年 7 月 22 日

內(nèi)容

[圖片上傳中银伟。。傅物。(5)]在 IBM Bluemix 云平臺(tái)上開發(fā)并部署您的下一個(gè)應(yīng)用琉预。
開始您的試用

概述
對(duì)于大型 JAVA 應(yīng)用程序來說,再精細(xì)的測(cè)試也難以堵住所有的漏洞卒暂,即便我們?cè)跍y(cè)試階段進(jìn)行了大量卓有成效的工作也祠,很多問題還是會(huì)在生產(chǎn)環(huán)境下暴露出來近速,并且很難在測(cè)試環(huán)境中進(jìn)行重現(xiàn)堪旧。JVM 能夠記錄下問題發(fā)生時(shí)系統(tǒng)的部分運(yùn)行狀態(tài)崎场,并將其存儲(chǔ)在堆轉(zhuǎn)儲(chǔ) (Heap Dump) 文件中遂蛀,從而為我們分析和診斷問題提供了重要的依據(jù)干厚。
通常內(nèi)存泄露分析被認(rèn)為是一件很有難度的工作蛮瞄,一般由團(tuán)隊(duì)中的資深人士進(jìn)行。不過芹助,今天我們要介紹的 MAT(Eclipse Memory Analyzer)被認(rèn)為是一個(gè)“傻瓜式“的堆轉(zhuǎn)儲(chǔ)文件分析工具闲先,你只需要輕輕點(diǎn)擊一下鼠標(biāo)就可以生成一個(gè)專業(yè)的分析報(bào)告伺糠。和其他內(nèi)存泄露分析工具相比,MAT 的使用非常容易训桶,基本可以實(shí)現(xiàn)一鍵到位舵揭,即使是新手也能夠很快上手使用。
MAT 的使用是如此容易置侍,你是不是也很有興趣來親自感受下呢箱叁,那么第一步我們先來安裝 MAT耕漱。

回頁首
準(zhǔn)備環(huán)境和測(cè)試數(shù)據(jù)
我們使用的是 Eclipse Memory Analyzer V0.8,Sun JDK 6
安裝 MAT
和其他插件的安裝非常類似灾梦,MAT 支持兩種安裝方式,一種是“單機(jī)版“的能岩,也就是說用戶不必安裝 Eclipse IDE 環(huán)境萧福,MAT 作為一個(gè)獨(dú)立的 Eclipse RCP 應(yīng)用運(yùn)行鲫忍;另一種是”集成版“的,也就是說 MAT 也可以作為 Eclipse IDE 的一部分坝辫,和現(xiàn)有的開發(fā)平臺(tái)集成射亏。
集成版的安裝需要借助 Update Manager智润。
如圖 1 所示,首先通過 Help -> Software Updates... 啟動(dòng)軟件更新管理向?qū)А?br> 圖 1. 安裝插件第一步

圖 1. 安裝插件第一步
選擇“Available Software“然后按如圖 2 所示的方式添加 MAT 的更新地址 http://download.eclipse.org/technology/mat/0.8/update-site/击纬。

http://download.eclipse.org/mat/1.6.1/update-site/
圖 2. 安裝插件第二步
[圖片上傳中更振。饭尝。。(7)]如圖 3 所示实撒,接下來選擇你想要安裝的 MAT 的功能點(diǎn)涉瘾,需要注意的是 Memory Analyzer (Chart) 這個(gè)功能是一個(gè)可選的安裝項(xiàng)目立叛,它主要用來生成相關(guān)的報(bào)表,不過如果需要用到這個(gè)功能其做,你還需要額外的安裝 BIRT Chart Engine。
圖 3. 安裝插件第三步
[圖片上傳中驹沿。蹈胡。审残。(8)]插件安裝完畢,你還需要重新啟動(dòng) Eclipse 的工作平臺(tái)。
比較而言璧坟,單機(jī)版的安裝方式非常簡(jiǎn)單赎懦,用戶只需要下載相應(yīng)的安裝包,然后解壓縮即可運(yùn)行黎茎,這也是被普遍采用的一種安裝方式傅瞻。在下面的例子里盲憎,我們使用的也是單機(jī)版的 MAT。具體的下載要求和地址可參見其產(chǎn)品下載頁面:http://www.eclipse.org/mat/downloads.php溺森。
另外窑眯,如果你需要用 MAT 來分析 IBM JVM 生成的 dump 文件的話磅甩,還需要額外安裝 IBM Diagnostic Tool Framework ,具體的下載和安裝配置步驟請(qǐng)參見:http://www.ibm.com/developerworks/java/jdk/tools/dtfj.html
配置環(huán)境參數(shù)
安裝完成之后铛铁,為了更有效率的使用 MAT,我們還需要做一些配置工作括眠。因?yàn)橥ǔ6灾啦颍治鲆粋€(gè)堆轉(zhuǎn)儲(chǔ)文件需要消耗很多的堆空間薄声,為了保證分析的效率和性能,在有條件的情況下德频,我們會(huì)建議分配給 MAT 盡可能多的內(nèi)存資源壹置。你可以采用如下兩種方式來分配內(nèi)存更多的內(nèi)存資源給 MAT表谊。
一種是修改啟動(dòng)參數(shù) MemoryAnalyzer.exe -vmargs -Xmx4g
另一種是編輯文件 MemoryAnalyzer.ini,在里面添加類似信息 -vmargs – Xmx4g难咕。
至此余佃,MAT 就已經(jīng)成功地安裝配置好了挑格,開始進(jìn)入實(shí)戰(zhàn)吧漂彤。
獲得堆轉(zhuǎn)儲(chǔ)文件
巧婦難為無米之炊,我們首先需要獲得一個(gè)堆轉(zhuǎn)儲(chǔ)文件立润。為了方便媳板,本文采用的是 Sun JDK 6。通常來說破讨,只要你設(shè)置了如下所示的 JVM 參數(shù):
-XX:+HeapDumpOnOutOfMemoryError
JVM 就會(huì)在發(fā)生內(nèi)存泄露時(shí)抓拍下當(dāng)時(shí)的內(nèi)存狀態(tài)提陶,也就是我們想要的堆轉(zhuǎn)儲(chǔ)文件。
如果你不想等到發(fā)生崩潰性的錯(cuò)誤時(shí)才獲得堆轉(zhuǎn)儲(chǔ)文件锌蓄,也可以通過設(shè)置如下 JVM 參數(shù)來按需獲取堆轉(zhuǎn)儲(chǔ)文件瘸爽。
-XX:+HeapDumpOnCtrlBreak
除此之外铅忿,還有很多的工具,例如 JMap昼捍,JConsole 都可以幫助我們得到一個(gè)堆轉(zhuǎn)儲(chǔ)文件肢扯。本文實(shí)例就是使用 JMap 直接獲取了 Eclipse Galileo 進(jìn)程的堆轉(zhuǎn)儲(chǔ)文件蔚晨。您可以使用如下命令:
JMap -dump:format=b,file=<dumpfile> <pid>
不過铭腕,您需要了解到多糠,不同廠家的 JVM 所生成的堆轉(zhuǎn)儲(chǔ)文件在數(shù)據(jù)存儲(chǔ)格式以及數(shù)據(jù)存儲(chǔ)內(nèi)容上有很多區(qū)別夹孔, MAT 不是一個(gè)萬能工具,它并不能處理所有類型的堆存儲(chǔ)文件只怎。但是比較主流的廠家和格式怜俐,例如 Sun, HP, SAP 所采用的 HPROF 二進(jìn)制堆存儲(chǔ)文件拍鲤,以及 IBM 的 PHD 堆存儲(chǔ)文件等都能被很好的解析(您需要安裝額外的插件汞扎,請(qǐng)參考 相關(guān)說明澈魄,本文不作詳細(xì)解釋)蕾哟。
萬事俱備谭确,接下來,我們就可以開始體驗(yàn)一鍵式的堆存儲(chǔ)分析功能了芬迄。

回頁首
生成分析報(bào)告
首先昂秃,啟動(dòng)前面安裝配置好的 Memory Analyzer tool , 然后選擇菜單項(xiàng) File- Open Heap Dump 來加載需要分析的堆轉(zhuǎn)儲(chǔ)文件肠骆。文件加載完成后蚀腿,你可以看到如圖 4 所示的界面:
圖 4. 概覽
[圖片上傳中。廓脆。磁玉。(9)]通過上面的概覽蚊伞,我們對(duì)內(nèi)存占用情況有了一個(gè)總體的了解。先檢查一下 MAT 生成的一系列文件氧枣。
圖 5. 文件列表
[圖片上傳中便监。。毁靶。(10)]可以看到 MAT 工具提供了一個(gè)很貼心的功能逊移,將報(bào)告的內(nèi)容壓縮打包到一個(gè) zip 文件胳泉,并把它存放到原始堆轉(zhuǎn)儲(chǔ)文件的存放目錄下扇商,這樣如果您需要和同事一起分析這個(gè)內(nèi)存問題的話,只需要把這個(gè)小小的 zip 包發(fā)給他就可以了蔬芥,不需要把整個(gè)堆文件發(fā)給他笔诵。并且整個(gè)報(bào)告是一個(gè) HTML 格式的文件姑子,用瀏覽器就可以輕松打開街佑。
接下來我們就可以來看看生成的報(bào)告都包括什么內(nèi)容,能不能幫我們找到問題所在吧。您可以點(diǎn)擊工具欄上的 Leak Suspects 菜單項(xiàng)來生成內(nèi)存泄露分析報(bào)告剂公,也可以直接點(diǎn)擊餅圖下方的 Reports->Leak Suspects 鏈接來生成報(bào)告纲辽。
圖 6. 工具欄菜單
[圖片上傳中拖吼。。篙议。(11)]
回頁首
分析三步曲
通常我們都會(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)告
[圖片上傳中。星澳。疚顷。(12)]如圖 7 所示,在報(bào)告上最醒目的就是一張簡(jiǎn)潔明了的餅圖禁偎,從圖上我們可以清晰地看到一個(gè)可疑對(duì)象消耗了系統(tǒng) 99% 的內(nèi)存。
在圖的下方還有對(duì)這個(gè)可疑對(duì)象的進(jìn)一步描述如暖。我們可以看到內(nèi)存是由 java.util.Vector 的實(shí)例消耗的笆檀,com.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)存酒唉,誰阻止了垃圾回收機(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)告
[圖片上傳中酣衷。。次泽。(13)]我們查看下從 GC 根元素到內(nèi)存消耗聚集點(diǎn)的最短路徑:

圖 9. 從根元素到內(nèi)存消耗聚集點(diǎn)的最短路徑
[圖片上傳中穿仪。。意荤。(14)]我們可以很清楚的看到整個(gè)引用鏈啊片,內(nèi)存聚集點(diǎn)是一個(gè)擁有大量對(duì)象的集合,如果你對(duì)代碼比較熟悉的話玖像,相信這些信息應(yīng)該能給你提供一些找到內(nèi)存泄露的思路了钠龙。
接下來,我們?cè)倮^續(xù)看看御铃,這個(gè)對(duì)象集合里到底存放了什么,為什么會(huì)消耗掉如此多的內(nèi)存沈矿。
圖 10. 內(nèi)存消耗聚集對(duì)象信息
[圖片上傳中上真。。羹膳。(15)]在這張圖上睡互,我們可以清楚的看到,這個(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 的幫助文檔。

參考資料
您可以查看 Eclipse 的 MAT 項(xiàng)目首頁掖鱼,了解 MAT 的最新動(dòng)態(tài)然走。
訪問 developerWorks Open source 專區(qū)獲得豐富的 how-to 信息、工具和項(xiàng)目更新以及 最受歡迎的文章和教程锨用,幫助您用開放源碼技術(shù)進(jìn)行開發(fā)丰刊,并將它們與 IBM 產(chǎn)品結(jié)合使用。

條評(píng)論
請(qǐng) 登錄注冊(cè) 后發(fā)表評(píng)論增拥。
添加評(píng)論:

注意:評(píng)論中不支持 HTML 語法

有新評(píng)論時(shí)提醒我
剩余 1000 字符

快來添加第一條評(píng)論

[圖片上傳中啄巧。。掌栅。(16)]IBM Bluemix 資源中心
文章秩仆、教程、演示猾封,幫助您構(gòu)建澄耍、部署和管理云應(yīng)用。

[圖片上傳中晌缘。齐莲。。(17)]developerWorks 中文社區(qū)
立即加入來自 IBM 的專業(yè) IT 社交網(wǎng)絡(luò)磷箕。

[圖片上傳中选酗。。岳枷。(18)]IBM 軟件資源中心
免費(fèi)下載芒填、試用軟件產(chǎn)品呜叫,構(gòu)建應(yīng)用并提升技能。

回頁首

幫助
聯(lián)系編輯
提交內(nèi)容
訂閱源

新浪微博
報(bào)告濫用
使用條款
第三方提示

隱私條約
瀏覽輔助
IBM 教育學(xué)院教育培養(yǎng)計(jì)劃
IBM 創(chuàng)業(yè)企業(yè)全球扶持計(jì)劃
ISV 資源 (英語)

dW 中國(guó)每周時(shí)事通訊

選擇語言:
English
中文
日本語
Русский
Português (Brasil)
Espa?ol
??

[圖片上傳中殿衰。朱庆。。(19)]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闷祥,一起剝皮案震驚了整個(gè)濱河市娱颊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜀踏,老刑警劉巖维蒙,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異果覆,居然都是意外死亡颅痊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門局待,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斑响,“玉大人,你說我怎么就攤上這事钳榨〗⒎#” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵薛耻,是天一觀的道長(zhǎng)营罢。 經(jīng)常有香客問我,道長(zhǎng)饼齿,這世上最難降的妖魔是什么饲漾? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮缕溉,結(jié)果婚禮上考传,老公的妹妹穿的比我還像新娘。我一直安慰自己证鸥,他們只是感情好僚楞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著枉层,像睡著了一般泉褐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸟蜡,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天膜赃,我揣著相機(jī)與錄音,去河邊找鬼矩欠。 笑死财剖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的癌淮。 我是一名探鬼主播躺坟,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼乳蓄!你這毒婦竟也來了咪橙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤虚倒,失蹤者是張志新(化名)和其女友劉穎美侦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魂奥,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菠剩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耻煤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片具壮。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哈蝇,靈堂內(nèi)的尸體忽然破棺而出棺妓,到底是詐尸還是另有隱情,我是刑警寧澤炮赦,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布怜跑,位于F島的核電站,受9級(jí)特大地震影響吠勘,放射性物質(zhì)發(fā)生泄漏性芬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一看幼、第九天 我趴在偏房一處隱蔽的房頂上張望批旺。 院中可真熱鬧,春花似錦诵姜、人聲如沸汽煮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暇赤。三九已至,卻和暖如春宵凌,著一層夾襖步出監(jiān)牢的瞬間鞋囊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工瞎惫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留溜腐,地道東北人译株。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像挺益,于是被迫代替她去往敵國(guó)和親歉糜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 內(nèi)存管理的目的就是讓我們?cè)陂_發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題望众。內(nèi)存泄漏大家都不陌生了匪补,簡(jiǎn)單粗俗的講,...
    宇宙只有巴掌大閱讀 2,361評(píng)論 0 12
  • 分析和理解應(yīng)用的內(nèi)存使用情況是開發(fā)過程中一項(xiàng)不小的挑戰(zhàn)烂翰。一個(gè)微小的邏輯錯(cuò)誤可能會(huì)導(dǎo)致監(jiān)聽器沒法被釋放回收夯缺,最終導(dǎo)致...
    Rave_Tian閱讀 10,539評(píng)論 0 15
  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理,因此不免有一些不準(zhǔn)確的地方甘耿,同時(shí)不同JDK版本的...
    高廣超閱讀 15,565評(píng)論 3 83
  • 由于Android是為移動(dòng)設(shè)備開發(fā)的操作系統(tǒng)踊兜,我們?cè)陂_發(fā)應(yīng)用程序的時(shí)候應(yīng)當(dāng)始終把內(nèi)存問題充分考慮在內(nèi)。雖然Andr...
    Ten_Minutes閱讀 923評(píng)論 0 3
  • 一天棵里,一個(gè)朋友借錢润文。借了X元。約定某日給還殿怜,可到了那一天典蝌,他沒還,過了一陣头谜,打電話催了下骏掀,因?yàn)榧庇谩Kf柱告,那么一點(diǎn)...
    冰瓶閱讀 566評(píng)論 0 0