亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Java內(nèi)存泄漏介紹

nanfeiyan / 1018人閱讀

摘要:本章會說明什么是內(nèi)存泄漏,為什么發(fā)生,以及如何防止它們。但是,未使用的對象并不是全部未被引用,其中一些被引用這是內(nèi)存泄漏的來源。注意集合類,如等,因?yàn)樗鼈兪前l(fā)現(xiàn)內(nèi)存泄漏的常見地方。如果一個(gè)類管理自己的內(nèi)存,程序應(yīng)該對內(nèi)存泄漏保持警惕。

內(nèi)存管理是Java最重要的優(yōu)勢之一,你只需創(chuàng)建對象,Java垃圾收集器會自動(dòng)負(fù)責(zé)分配和釋放內(nèi)存。但是,情況并不那么簡單,因?yàn)樵贘ava應(yīng)用程序中經(jīng)常發(fā)生內(nèi)存泄漏。

本章會說明什么是內(nèi)存泄漏,為什么發(fā)生,以及如何防止它們。

什么是內(nèi)存泄漏?

內(nèi)存泄漏的定義:應(yīng)用程序不再使用的對象,垃圾收集器卻無法刪除它們,因?yàn)樗鼈冋诒灰谩?/p>

為了理解這個(gè)定義,我們需要了解對象在內(nèi)存中的狀態(tài)。下圖說明了什么是未引用的,什么是引用的對象。

從圖中可以看出,有被引用的對象和未被引用的對象。未引用的對象將被垃圾收集,而被引用的對象將不會被垃圾收集。未引用的對象肯定是未使用的,因?yàn)闆]有其他對象引用它。但是,未使用的對象并不是全部未被引用,其中一些被引用!這是內(nèi)存泄漏的來源。

為什么內(nèi)存泄漏發(fā)生?

讓我們來看看下面的例子,看看為什么發(fā)生內(nèi)存泄漏。在下面的例子中,對象A是指對象B。A的生命周期(t1 - t4)比B的(t2 - t3)長得多,當(dāng)應(yīng)用中不再使用B時(shí),A仍然有一個(gè)B的引用,這樣垃圾收集器就不能從內(nèi)存中刪除B。這就可能會導(dǎo)致內(nèi)存不足的問題,因?yàn)槿绻鸄同時(shí)為更多的對象做同樣的事情,那么會有很多像B這樣的對象沒有收集并占用內(nèi)存空間。

B也可能擁有一堆其他對象的引用,B引用的對象也不會被收集。所有這些未使用的對象將消耗寶貴的內(nèi)存空間。

如何防止內(nèi)存泄漏?

以下是防止內(nèi)存泄漏的一些快速實(shí)用技巧。

注意集合類,如HashMap、ArrayList等,因?yàn)樗鼈兪前l(fā)現(xiàn)內(nèi)存泄漏的常見地方。當(dāng)它們被聲明為靜態(tài)時(shí),它們的生命時(shí)間與應(yīng)用程序的生命時(shí)間是相同的。

注意事件監(jiān)聽器和回調(diào)。如果一個(gè)偵聽器被注冊了,但是當(dāng)類不再被使用時(shí),可能會發(fā)生內(nèi)存泄漏。

如果一個(gè)類管理自己的內(nèi)存,程序應(yīng)該對內(nèi)存泄漏保持警惕。通常情況下,指向其他對象的成員變量需要為null值。

思考

為什么JDK 6中的substring方法會導(dǎo)致內(nèi)存泄漏?

推薦閱讀

去BAT面試完的Mysql面試題總結(jié)(55道,帶完整答案)

阿里高級Java面試題(首發(fā),70道,帶詳細(xì)答案)

2017派臥底去阿里、京東、美團(tuán)、滴滴帶回來的面試題及答案

Spring面試題(70道,史上最全)

通往大神之路,百度Java面試題前200頁。

分享Java干貨,高并發(fā)編程,熱門技術(shù)教程,微服務(wù)及分布式技術(shù),架構(gòu)設(shè)計(jì),區(qū)塊鏈技術(shù),人工智能,大數(shù)據(jù),Java面試題,以及前沿?zé)衢T資訊等。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/71381.html

相關(guān)文章

  • 內(nèi)存 問題- 收藏集 - 掘金

    摘要:然而,中依然有可能發(fā)生內(nèi)存泄漏。所以你的安卓快速定位解決內(nèi)存泄漏掘金昨天是個(gè)好日子,程序員的節(jié)日,在這里給所有的程序員送上一份遲到的祝福。應(yīng)用內(nèi)存泄漏的定位分析與解決策略掘金,大家好,我是。 Android 性能優(yōu)化之巧用軟引用與弱引用優(yōu)化內(nèi)存使用 - Android - 掘金前言: 從事Android開發(fā)的同學(xué)都知道移動(dòng)設(shè)備的內(nèi)存使用是非常敏感的話題,今天我們來看下如何使用軟引用與弱...

    TIGERB 評論0 收藏0
  • Android內(nèi)存泄漏定位、分析、解決全方案

    摘要:如果這個(gè)靜態(tài)變量在生命周期結(jié)束后沒有清空,就導(dǎo)致內(nèi)存泄漏。因此造成內(nèi)存泄露。注冊沒取消造成的內(nèi)存泄露這種的內(nèi)存泄露比純的內(nèi)存泄漏還要嚴(yán)重,因?yàn)槠渌恍┏绦蚩赡芤孟到y(tǒng)的程序的對象比如注冊機(jī)制。 原文鏈接 更多教程 為什么會發(fā)生內(nèi)存泄漏 內(nèi)存空間使用完畢之后未回收, 會導(dǎo)致內(nèi)存泄漏。有人會問:Java不是有垃圾自動(dòng)回收機(jī)制么?不幸的是,在Java中仍存在很多容易導(dǎo)致內(nèi)存泄漏的邏輯(...

    yiliang 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<