Java中的內(nèi)存泄露

在Java中微宝,內(nèi)存泄漏就是存在一些被分配的對象棺亭,這些對象有下面兩個特點(diǎn),首先芥吟,這些對象是可達(dá)的侦铜,即在有向圖中,存在通路可以與其相連钟鸵;其次钉稍,這些對象是無用的,即程序以后不會再使用這些對象棺耍。如果對象滿足這兩個條件贡未,這些對象就可以判定為Java中的內(nèi)存泄漏,這些對象不會被GC所回收,然而它卻占用內(nèi)存俊卤。

在C++中嫩挤,內(nèi)存泄漏的范圍更大一些。有些對象被分配了內(nèi)存空間消恍,然后卻不可達(dá)岂昭,由于C++中沒有GC,這些內(nèi)存將永遠(yuǎn)收不回來狠怨。在Java中约啊,這些不可達(dá)的對象都由GC負(fù)責(zé)回收,因此程序員不需要考慮這部分的內(nèi)存泄露佣赖。

通過分析恰矩,我們得知,對于C++憎蛤,程序員需要自己管理邊和頂點(diǎn)外傅,而對于Java程序員只需要管理邊就可以了(不需要管理頂點(diǎn)的釋放)。通過這種方式俩檬,Java提高了編程的效率萎胰。


圖2
圖2

因此,通過以上分析棚辽,我們知道在Java中也有內(nèi)存泄漏奥洼,但范圍比C++要小一些。因為Java從語言上保證晚胡,任何對象都是可達(dá)的灵奖,所有的不可達(dá)對象都由GC管理。

因此估盘,通過以上分析瓷患,我們知道在Java中也有內(nèi)存泄漏,但范圍比C++要小一些遣妥。因為Java從語言上保證擅编,任何對象都是可達(dá)的,所有的不可達(dá)對象都由GC管理箫踩。

對于程序員來說爱态,GC基本是透明的,不可見的境钟。雖然锦担,我們只有幾個函數(shù)可以訪問GC,例如運(yùn)行GC的函數(shù)System.gc()慨削,但是根據(jù)Java語言規(guī)范定義洞渔, 該函數(shù)不保證JVM的垃圾收集器一定會執(zhí)行套媚。因為,不同的JVM實現(xiàn)者可能使用不同的算法管理GC磁椒。通常堤瘤,GC的線程的優(yōu)先級別較低。JVM調(diào)用GC的策略也有很多種浆熔,有的是內(nèi)存使用到達(dá)一定程度時本辐,GC才開始工作,也有定時執(zhí)行的医增,有的是平緩執(zhí)行GC师郑,有的是中斷式執(zhí)行GC。但通常來說调窍,我們不需要關(guān)心這些。除非在一些特定的場合张遭,GC的執(zhí)行影響應(yīng)用程序的性能邓萨,例如對于基于Web的實時系統(tǒng),如網(wǎng)絡(luò)游戲等菊卷,用戶不希望GC突然中斷應(yīng)用程序執(zhí)行而進(jìn)行垃圾回收缔恳,那么我們需要調(diào)整GC的參數(shù),讓GC能夠通過平緩的方式釋放內(nèi)存洁闰,例如將垃圾回收分解為一系列的小步驟執(zhí)行歉甚,Sun提供的HotSpot JVM就支持這一特性。

下面給出了一個簡單的內(nèi)存泄露的例子扑眉。在這個例子中纸泄,我們循環(huán)申請Object對象,并將所申請的對象放入一個Vector中腰素,如果我們僅僅釋放引用本身聘裁,那么Vector仍然引用該對象,所以這個對象對GC來說是不可回收的弓千。因此衡便,如果對象加入到Vector后,還必須從Vector中刪除洋访,最簡單的方法就是將Vector對象設(shè)置為null镣陕。

Vector v=new Vector(10);
for (int i=1;i<100; i++)
{
    Object o=new Object();
    v.add(o);
    o=null; 
}

此時,所有的Object對象都沒有被釋放姻政,因為變量v引用這些對象呆抑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市汁展,隨后出現(xiàn)的幾起案子理肺,更是在濱河造成了極大的恐慌摄闸,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妹萨,死亡現(xiàn)場離奇詭異年枕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)乎完,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門熏兄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人树姨,你說我怎么就攤上這事摩桶。” “怎么了帽揪?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵硝清,是天一觀的道長。 經(jīng)常有香客問我转晰,道長芦拿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任查邢,我火速辦了婚禮蔗崎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扰藕。我一直安慰自己缓苛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布邓深。 她就那樣靜靜地躺著未桥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芥备。 梳的紋絲不亂的頭發(fā)上钢属,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機(jī)與錄音门躯,去河邊找鬼淆党。 笑死,一個胖子當(dāng)著我的面吹牛讶凉,可吹牛的內(nèi)容都是我干的染乌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼懂讯,長吁一口氣:“原來是場噩夢啊……” “哼荷憋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起褐望,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤勒庄,失蹤者是張志新(化名)和其女友劉穎串前,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體实蔽,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荡碾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了局装。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坛吁。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖铐尚,靈堂內(nèi)的尸體忽然破棺而出拨脉,到底是詐尸還是另有隱情,我是刑警寧澤宣增,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布玫膀,位于F島的核電站,受9級特大地震影響爹脾,放射性物質(zhì)發(fā)生泄漏帖旨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一誉简、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盟广,春花似錦闷串、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桨武,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呀酸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工性誉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人错览。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓纫雁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親倾哺。 傳聞我的和親對象是個殘疾皇子轧邪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

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