java內(nèi)存泄漏與內(nèi)存溢出

引用自:https://www.cnblogs.com/panxuejun/p/5883044.html

內(nèi)存溢出 out of memory酱塔,是指程序在申請內(nèi)存時(shí),沒有足夠的內(nèi)存空間供其使用,出現(xiàn)out of memory;

內(nèi)存泄露 memory leak,是指程序在申請內(nèi)存后音比,無法釋放已申請的內(nèi)存空間,一次內(nèi)存泄露危害可以忽略氢惋,但內(nèi)存泄露堆積后果很嚴(yán)重,無論多少內(nèi)存,遲早會被占光稽犁。

memory leak會最終會導(dǎo)致out of memory焰望!

以發(fā)生的方式來分類,內(nèi)存泄漏可以分為4類:?

1. 常發(fā)性內(nèi)存泄漏已亥。發(fā)生內(nèi)存泄漏的代碼會被多次執(zhí)行到熊赖,每次被執(zhí)行的時(shí)候都會導(dǎo)致一塊內(nèi)存泄漏。

2. 偶發(fā)性內(nèi)存泄漏虑椎。發(fā)生內(nèi)存泄漏的代碼只有在某些特定環(huán)境或操作過程下才會發(fā)生震鹉。常發(fā)性和偶發(fā)性是相對的。對于特定的環(huán)境捆姜,偶發(fā)性的也許就變成了常發(fā)性的传趾。所以測試環(huán)境和測試方法對檢測內(nèi)存泄漏至關(guān)重要。

3. 一次性內(nèi)存泄漏泥技。發(fā)生內(nèi)存泄漏的代碼只會被執(zhí)行一次浆兰,或者由于算法上的缺陷,導(dǎo)致總會有一塊僅且一塊內(nèi)存發(fā)生泄漏珊豹。比如簸呈,在類的構(gòu)造函數(shù)中分配內(nèi)存,在析構(gòu)函數(shù)中卻沒有釋放該內(nèi)存店茶,所以內(nèi)存泄漏只會發(fā)生一次蜕便。

4. 隱式內(nèi)存泄漏。程序在運(yùn)行過程中不停的分配內(nèi)存贩幻,但是直到結(jié)束的時(shí)候才釋放內(nèi)存轿腺。嚴(yán)格的說這里并沒有發(fā)生內(nèi)存泄漏,因?yàn)樽罱K程序釋放了所有申請的內(nèi)存丛楚。但是對于一個服務(wù)器程序吃溅,需要運(yùn)行幾天,幾周甚至幾個月鸯檬,不及時(shí)釋放內(nèi)存也可能導(dǎo)致最終耗盡系統(tǒng)的所有內(nèi)存决侈。所以,我們稱這類內(nèi)存泄漏為隱式內(nèi)存泄漏。

從用戶使用程序的角度來看赖歌,內(nèi)存泄漏本身不會產(chǎn)生什么危害枉圃,作為一般的用戶,根本感覺不到內(nèi)存泄漏的存在庐冯。真正有危害的是內(nèi)存泄漏的堆積孽亲,這會最終消耗盡系統(tǒng)所有的內(nèi)存。從這個角度來說展父,一次性內(nèi)存泄漏并沒有什么危害返劲,因?yàn)樗粫逊e,而隱式內(nèi)存泄漏危害性則非常大栖茉,因?yàn)檩^之于常發(fā)性和偶發(fā)性內(nèi)存泄漏它更難被檢測到


一篮绿、Java內(nèi)存回收機(jī)制?

不論哪種語言的內(nèi)存分配方式,都需要返回所分配內(nèi)存的真實(shí)地址吕漂,也就是返回一個指針到內(nèi)存塊的首地址亲配。Java中對象是采用new或者反射的方法創(chuàng)建的,這些對象的創(chuàng)建都是在堆(Heap)中分配的惶凝,所有對象的回收都是由Java虛擬機(jī)通過垃圾回收機(jī)制完成的吼虎。GC為了能夠正確釋放對象,會監(jiān)控每個對象的運(yùn)行狀況苍鲜,對他們的申請思灰、引用、被引用混滔、賦值等狀況進(jìn)行監(jiān)控官辈,Java會使用有向圖的方法進(jìn)行管理內(nèi)存,實(shí)時(shí)監(jiān)控對象是否可以達(dá)到遍坟,如果不可到達(dá)拳亿,則就將其回收,

二愿伴、Java內(nèi)存泄露引起原因?

內(nèi)存泄露是指無用對象(不再使用的對象)持續(xù)占有內(nèi)存或無用對象的內(nèi)存得不到及時(shí)釋放肺魁,從而造成的內(nèi)存空間的浪費(fèi)稱為內(nèi)存泄露。內(nèi)存泄露有時(shí)不嚴(yán)重且不易察覺隔节,這樣開發(fā)者就不知道存在內(nèi)存泄露鹅经,但有時(shí)也會很嚴(yán)重,會提示你Out of memory怎诫。


那么瘾晃,Java內(nèi)存泄露根本原因是什么呢?長生命周期的對象持有短生命周期對象的引用就很可能發(fā)生內(nèi)存泄露幻妓,盡管短生命周期對象已經(jīng)不再需要蹦误,但是因?yàn)殚L生命周期對象持有它的引用而導(dǎo)致不能被回收,這就是java中內(nèi)存泄露的發(fā)生場景。具體主要有如下幾大類:?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末强胰,一起剝皮案震驚了整個濱河市舱沧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偶洋,老刑警劉巖熟吏,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玄窝,居然都是意外死亡牵寺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門恩脂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帽氓,“玉大人,你說我怎么就攤上這事东亦。” “怎么了唬渗?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵典阵,是天一觀的道長。 經(jīng)常有香客問我镊逝,道長壮啊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任撑蒜,我火速辦了婚禮歹啼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘座菠。我一直安慰自己狸眼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布浴滴。 她就那樣靜靜地躺著拓萌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪升略。 梳的紋絲不亂的頭發(fā)上微王,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音品嚣,去河邊找鬼炕倘。 笑死,一個胖子當(dāng)著我的面吹牛翰撑,可吹牛的內(nèi)容都是我干的罩旋。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘸恼!你這毒婦竟也來了劣挫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤东帅,失蹤者是張志新(化名)和其女友劉穎压固,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體靠闭,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帐我,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愧膀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拦键。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖檩淋,靈堂內(nèi)的尸體忽然破棺而出芬为,到底是詐尸還是另有隱情,我是刑警寧澤蟀悦,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布媚朦,位于F島的核電站,受9級特大地震影響日戈,放射性物質(zhì)發(fā)生泄漏询张。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一浙炼、第九天 我趴在偏房一處隱蔽的房頂上張望份氧。 院中可真熱鬧,春花似錦弯屈、人聲如沸蜗帜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钮糖。三九已至,卻和暖如春酌住,著一層夾襖步出監(jiān)牢的瞬間店归,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工酪我, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留消痛,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓都哭,卻偏偏與公主長得像秩伞,于是被迫代替她去往敵國和親逞带。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351