Java內(nèi)存管理分析
- 期刊名字:硅谷
- 文件大?。?83kb
- 論文作者:魏遠(yuǎn)紅
- 作者單位:武漢信息傳播職業(yè)技術(shù)學(xué)院
- 更新時間:2020-09-25
- 下載次數(shù):次
信息、SILICON科學(xué)Valley ■Java內(nèi)存管理分析魏遠(yuǎn)紅(武漢信息傳播職業(yè)技術(shù)學(xué)院湖北武漢43022)[摘 要]討論內(nèi)存泄漏的概念, Java語 言的內(nèi)存管理機(jī)制,垃圾回收器的原理,結(jié)合實(shí)際代碼分析Java語言中可能存在的內(nèi)存泄漏問題,并列舉幾種常見的檢測及防止上內(nèi)存灣漏的方法。[關(guān)鍵詞]Jave垃圾回收 內(nèi)存泄漏中圈分類號: TP3 文獻(xiàn)標(biāo)識碼; A文章編號: 1671-7597 (200) 0420040-01-.引離在一些被分配的對象,這些對象有下面兩個特點(diǎn),首先,這些對象是可達(dá)所謂內(nèi)存泄漏,是指系統(tǒng)中存在無法回收的內(nèi)存,有時候會造成內(nèi)存的,即在有向圖中,存在通路可以與其相連:其次,這些對象是無用的,不足或系統(tǒng)崩潰。關(guān)于內(nèi)存泄關(guān)問題,對于c/c++來說,這個應(yīng)該是比較常即程序以后不會再使用這些對象。如果對象滿足這兩個條件,這些對象就見的問題。對于Java語言,由于Java通過坨圾收集器(Garbage Collecti可以判定為Java中的內(nèi)存泄漏,這些對象不會敏GC所回收,然而它卻占用-On, GC)自動管理內(nèi)存的回收,程序員不需要通過調(diào)用函數(shù)來釋放內(nèi)存。內(nèi)存。在C++中,內(nèi)存泄漏的范圍更大- 些。 有些對象被分配了內(nèi)存空間,因此,很多程序員認(rèn)為Java不存在內(nèi)存泄漏問題,或者認(rèn)為即使有內(nèi)存泄然后卻不可達(dá),由于C++中沒有GC, 這些內(nèi)存將永遠(yuǎn)收不回來。在Java中,潮也不是程序的責(zé)任,而是CC或JVM的問題。 其實(shí),這種想法是不正確的,這些不可達(dá)的對象都由CC負(fù)責(zé)回收,因此程序員不需要考慮這部分的內(nèi)存因?yàn)镴ava也存在內(nèi)存泄露,但它的表現(xiàn)與C++不同。隨著越來越多的服務(wù)器泄露。通過分析, 我們得知,對于C++,程序員需要自己管理邊和頂點(diǎn),程序采用Java技術(shù),例如JSP, Servlet, EJB等, 服務(wù)器程序往往長期運(yùn)而對于Java程序員只需要管理邊就可以了(不需要管理頂點(diǎn)的釋放) .通行。另外,在很多嵌入式系統(tǒng)中,內(nèi)存的總量非常有限。內(nèi)存泄露問題也過這種方式,Java提高了編程的效率。因此, 通過以上分析,我們知道在就變得十分關(guān)鍵,即使每次運(yùn)行少量泄漏,長期運(yùn)行之后, 系統(tǒng)也是面臨Java中也有內(nèi)存泄漏,但范圍比C++要小-一些。因?yàn)镴ava從語言上保證,任崩漬的危險。何對象都是可達(dá)的,所有的不可達(dá)對象都由CC管理。二、Java理!內(nèi)存的方法三、匐何檢測內(nèi)存泄漏(-) Java垃圾回收器原理最后一個重要的問題,就是如何檢測Java的內(nèi)存泄漏。目前,我們通Java的內(nèi)存管理就是對象的分配和釋放問題。在Java中, 程序負(fù)需要常使用一些工具來檢查Java程序的內(nèi)存泄漏問題。市場上已有幾種專業(yè)檢通過關(guān)鍵字new為每個對象申請內(nèi)存空間(基本類型除外) ,所有的對象查Java內(nèi)存泄漏的工具,它們的基本T.作甌理大同小異,都是通過監(jiān)測都在堆(Heap)中分配空間。另外,對象的釋放是由GC決定和執(zhí)行的。在Java程序運(yùn)行時,所有對象的申請、釋放等動作,將內(nèi)存管理的所有信息Java中,內(nèi)存的分配是由程序完成的,而內(nèi)存的釋放是有CC完成的,這種進(jìn)行統(tǒng)計、分析、可視化.開發(fā)人員將根據(jù)這些信息判斷程序是否有內(nèi)存收支兩條線的方法磅實(shí)簡化了程序員的工作。但同時,它也加重了JVW的工泄溯問題.這些工具包括Optimizeit Profiler, JProbe Profiler,作。這也是Java程序運(yùn)行速度較慢的原因之一。因?yàn)?,GC為了能夠正確釋JinSight, Rational公司的Purify等.放對象,CC必須監(jiān)挖每- 一個對象的運(yùn)行狀態(tài),包括對象的申請、引用、被四、結(jié)柬語引用、賦值等,GC都衢 要進(jìn)行監(jiān)控。綜上所述, Java也存在內(nèi)存泄囂問題。其原因主要是-些對象雖然不監(jiān)視對象狀態(tài)是為了更加準(zhǔn)確地、及時地釋放對象,而釋放對象的根再被使用,但它們?nèi)匀槐灰谩榱私鉀Q這些問題,我們可以通過軟件工本原則就是該對象不再被引用。為了更好理解GC的工作原理,我們可以將具來檢查內(nèi)存泄露,檢查的主要原理就是粲露出所有堆中的對象,讓程序?qū)ο罂紤]為有向圖的頂點(diǎn),將引用關(guān)系考慮為圖的有向邊,有向邊從引用員尋找那些無用但仍被引用的對象。者指向被引對象。另外,每個線程對象可以作為-個圖的起始頂點(diǎn),例如大多程序從main進(jìn)程開始執(zhí)行,那么該團(tuán)就是以main進(jìn)程項(xiàng)點(diǎn)開始的一棵根樹。在這個有向團(tuán)中,根頂點(diǎn)可達(dá)的對象都是有效對象,CC將不回收這些對象。如果某個對象(連通子圖)與這個根頂點(diǎn)不可達(dá)(注意,該圖為參考文獻(xiàn):有向圈),那么我們認(rèn)為這個(這些)對象不再被引用,可以被CC回收。[1]Bruce Eckel著,侯捷譯,Java編程思想, 機(jī)械工業(yè)出版社, 1999(二)什么是Java中的內(nèi)存泄露[2]Joshua Bloch著,Effective Java, 中國電力出版社, 2004.下面,我們就可以描述什么是內(nèi)存泄漏。在Java中, 內(nèi)存泄漏就是存[3]中國程序員論壇,. csdn. net.(.上接第51頁)更為簡便和符合現(xiàn)代軟件工程。就這一一點(diǎn)而言,Web應(yīng)用可以看成是傳統(tǒng)2004.C/S結(jié)構(gòu)的分布式擴(kuò)展。對比這兩種方式,我們會發(fā)現(xiàn)它們會越來越相似,[2]徽軟公司著,基于C#的Windors應(yīng)用程序設(shè)計,北京:高等教育出版最后的區(qū)別只在于客戶端是什么。Web應(yīng)用與C/S的主要不同只在于Web應(yīng)用杜, 200的客戶端是蒸于瀏覽器的,而C/S應(yīng)用的客戶端則五花八門,什么都有。它中國煤化工等教育出版社,200們的優(yōu)缺點(diǎn)也將主要由這一點(diǎn)決定。二北京:清華大學(xué)出版社,2008YHCN M H G大學(xué)出版社,200銬文獻(xiàn):[7]開發(fā)視界論壇,htp:///w st. org cn/bbs.[8]CSON網(wǎng)站,htp://blog. csdn. net.[1]微軟公司著,面向. NET的Web應(yīng)用程序設(shè)計,北京:高等教育出版社,[40].
-
C4烯烴制丙烯催化劑 2020-09-25
-
煤基聚乙醇酸技術(shù)進(jìn)展 2020-09-25
-
生物質(zhì)能的應(yīng)用工程 2020-09-25
-
我國甲醇工業(yè)現(xiàn)狀 2020-09-25
-
石油化工設(shè)備腐蝕與防護(hù)參考書十本免費(fèi)下載,絕版珍藏 2020-09-25
-
四噴嘴水煤漿氣化爐工業(yè)應(yīng)用情況簡介 2020-09-25
-
Lurgi和ICI低壓甲醇合成工藝比較 2020-09-25
-
甲醇制芳烴研究進(jìn)展 2020-09-25
-
精甲醇及MTO級甲醇精餾工藝技術(shù)進(jìn)展 2020-09-25

