日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java內(nèi)存泄漏的檢測和處理

如何查找引起內(nèi)存泄漏的原因一般有兩個步驟:第一是安排有經(jīng)驗的編程人員對代碼進行走查和分析,找出內(nèi)存泄漏發(fā)生的位置;第二是使用專門的內(nèi)存泄漏測試工具進行測試。

創(chuàng)新互聯(lián)是一家從事企業(yè)網(wǎng)站建設(shè)、成都做網(wǎng)站、成都網(wǎng)站設(shè)計、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計制作的專業(yè)網(wǎng)站制作公司,擁有經(jīng)驗豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨特的設(shè)計風(fēng)格。自公司成立以來曾獨立設(shè)計制作的站點近1000家。

第一個步驟在代碼走查的工作中,可以安排對系統(tǒng)業(yè)務(wù)和開發(fā)語言工具比較熟悉的開發(fā)人員對應(yīng)用的代碼進行了交叉走查,盡量找出代碼中存在的數(shù)據(jù)庫連接聲明和結(jié)果集未關(guān)閉、代碼冗余等故障代碼。

第二個步驟就是檢測Java的內(nèi)存泄漏。在這里我們通常使用一些工具來檢查Java程序的內(nèi)存泄漏問題。市場上已有幾種專業(yè)檢查Java內(nèi)存泄漏的工具,它們的基本工作原理大同小異,都是通過監(jiān)測Java程序運行時,所有對象的申請、釋放等動作,將內(nèi)存管理的所有信息進行統(tǒng)計、分析、可視化。開發(fā)人員將根據(jù)這些信息判斷程序是否有內(nèi)存泄漏問題。這些工具包括Optimizeit Profiler,JProbe Profiler,JinSight , Rational 公司的Purify等。

檢測內(nèi)存泄漏的存在

這里我們將簡單介紹我們在使用Optimizeit檢查的過程。通常在知道發(fā)生內(nèi)存泄漏之后,第一步是要弄清楚泄漏了什么數(shù)據(jù)和哪個類的對象引起了泄漏。

一般說來,一個正常的系統(tǒng)在其運行穩(wěn)定后其內(nèi)存的占用量是基本穩(wěn)定的,不應(yīng)該是無限制的增長的。同樣,對任何一個類的對象的使用個數(shù)也有一個相對穩(wěn)定的上限,不應(yīng)該是持續(xù)增長的。根據(jù)這樣的基本假設(shè),我們持續(xù)地觀察系統(tǒng)運行時使用的內(nèi)存的大小和各實例的個數(shù),如果內(nèi)存的大小持續(xù)地增長,則說明系統(tǒng)存在內(nèi)存泄漏,如果特定類的實例對象個數(shù)隨時間而增長(就是所謂的“增長率”),則說明這個類的實例可能存在泄漏情況。

另一方面通常發(fā)生內(nèi)存泄漏的第一個跡象是:在應(yīng)用程序中出現(xiàn)了OutOfMemoryError。在這種情況下,需要使用一些開銷較低的工具來監(jiān)控和查找內(nèi)存泄漏。雖然OutOfMemoryError也有可能應(yīng)用程序確實正在使用這么多的內(nèi)存;對于這種情況則可以增加JVM可用的堆的數(shù)量,或者對應(yīng)用程序進行某種更改,使它使用較少的內(nèi)存。

但是,在許多情況下,OutOfMemoryError都是內(nèi)存泄漏的信號。一種查明方法是不間斷地監(jiān)控GC的活動,確定內(nèi)存使用量是否隨著時間增加。如果確實如此,就可能發(fā)生了內(nèi)存泄漏。

處理內(nèi)存泄漏的方法

一旦知道確實發(fā)生了內(nèi)存泄漏,就需要更專業(yè)的工具來查明為什么會發(fā)生泄漏。JVM自己是不會告訴您的。這些專業(yè)工具從JVM獲得內(nèi)存系統(tǒng)信息的方法基本上有兩種:JVMTI和字節(jié)碼技術(shù)(byte code instrumentation)。Java虛擬機工具接口(Java Virtual Machine Tools Interface,JVMTI)及其前身Java虛擬機監(jiān)視程序接口(Java Virtual Machine Profiling Interface,JVMPI)是外部工具與JVM通信并從JVM收集信息的標(biāo)準(zhǔn)化接口。字節(jié)碼技術(shù)是指使用探測器處理字節(jié)碼以獲得工具所需的信息的技術(shù)。

Optimizeit是Borland公司的產(chǎn)品,主要用于協(xié)助對軟件系統(tǒng)進行代碼優(yōu)化和故障診斷,其中的Optimizeit Profiler主要用于內(nèi)存泄漏的分析。Profiler的堆視圖就是用來觀察系統(tǒng)運行使用的內(nèi)存大小和各個類的實例分配的個數(shù)的。

首先,Profiler會進行趨勢分析,找出是哪個類的對象在泄漏。系統(tǒng)運行長時間后可以得到四個內(nèi)存快照。對這四個內(nèi)存快照進行綜合分析,如果每一次快照的內(nèi)存使用都比上一次有增長,可以認(rèn)定系統(tǒng)存在內(nèi)存泄漏,找出在四個快照中實例個數(shù)都保持增長的類,這些類可以初步被認(rèn)定為存在泄漏。通過數(shù)據(jù)收集和初步分析,可以得出初步結(jié)論:系統(tǒng)是否存在內(nèi)存泄漏和哪些對象存在泄漏(被泄漏)。

接下來,看看有哪些其他的類與泄漏的類的對象相關(guān)聯(lián)。前面已經(jīng)談到Java中的內(nèi)存泄漏就是無用的對象保持,簡單地說就是因為編碼的錯誤導(dǎo)致了一條本來不應(yīng)該存在的引用鏈的存在(從而導(dǎo)致了被引用的對象無法釋放),因此內(nèi)存泄漏分析的任務(wù)就是找出這條多余的引用鏈,并找到其形成的原因。查看對象分配到哪里是很有用的。同時只知道它們?nèi)绾闻c其他對象相關(guān)聯(lián)(即哪些對象引用了它們)是不夠的,關(guān)于它們在何處創(chuàng)建的信息也很有用。

最后,進一步研究單個對象,看看它們是如何互相關(guān)聯(lián)的。借助于Profiler工具,應(yīng)用程序中的代碼可以在分配時進行動態(tài)添加,以創(chuàng)建堆棧跟蹤。也有可以對系統(tǒng)中所有對象分配進行動態(tài)的堆棧跟蹤。這些堆棧跟蹤可以在工具中進行累積和分析。對每個被泄漏的實例對象,必然存在一條從某個牽引對象出發(fā)到達(dá)該對象的引用鏈。處于堆??臻g的牽引對象在被從棧中彈出后就失去其牽引的能力,變?yōu)榉菭恳龑ο?。因此,在長時間的運行后,被泄露的對象基本上都是被作為類的靜態(tài)變量的牽引對象牽引。

總而言之, Java雖然有自動回收管理內(nèi)存的功能,但內(nèi)存泄漏也是不容忽視,它往往是破壞系統(tǒng)穩(wěn)定性的重要因素。

【編輯推薦】

  1. 幾種典型的Java內(nèi)存泄漏
  2. 詳細(xì)介紹Java的內(nèi)存管理與內(nèi)存泄露
  3. Java程序性能優(yōu)化之找出內(nèi)存溢出元兇
  4. 20個開發(fā)人員非常有用的Java功能代碼
  5. 走進Java 7中的模塊系統(tǒng)

當(dāng)前名稱:Java內(nèi)存泄漏的檢測和處理
URL鏈接:http://m.5511xx.com/article/dphodeg.html