亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺析Java中的內(nèi)存泄漏

 更新時間:2015年07月10日 11:26:20   投稿:goldensun  
這篇文章主要介紹了Java中的內(nèi)存泄漏,包括其基本概念和基本的預(yù)防措施,需要的朋友可以參考下

ava最明顯的一個優(yōu)勢就是它的內(nèi)存管理機(jī)制。你只需簡單創(chuàng)建對象,java的垃圾回收機(jī)制負(fù)責(zé)分配和釋放內(nèi)存。然而情況并不像想像的那么簡單,因為在Java應(yīng)用中經(jīng)常發(fā)生內(nèi)存泄漏。

本教程演示了什么是內(nèi)存泄漏,為什么會發(fā)生內(nèi)存泄漏以及如何預(yù)防內(nèi)存泄漏。

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

定義:如果對象在應(yīng)用中不再被使用,但由于它們在其他地方被引用,垃圾回收卻不能移除它們(這樣就造成了很多內(nèi)存不能釋放,從而導(dǎo)致內(nèi)存溢出的現(xiàn)象。譯注)。


要理解這一定義,我們需要理解內(nèi)存中對象的狀態(tài)。下圖說明了那些是未使用,那些是未引用。

2015710112438261.jpeg (650×400)

 從圖中可以看到被引用對象和未引用對象(的范圍)。未引用對象可以被垃圾回收機(jī)制回收,而被引用對象不能被垃圾回收機(jī)制回收。未引用對象當(dāng)然是沒有使用的,因為沒有其他對象引用了它。然而未使用對象并不都是未引用的。某些未使用的對象仍然被其他地方引用!這就是內(nèi)存泄漏起因。


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

讓我們來下面的這個例子,看看為什么會發(fā)生內(nèi)存泄漏。在如下例子中,A對象引用了B對象。A的生命周期(t1-t4)比B的生命周期(t2-t3)要長的多,當(dāng)B不再在應(yīng)用中被使用,A仍然持有對B的引用。這樣一來,垃圾回收機(jī)制不能從內(nèi)存中移除B。這很有可能導(dǎo)致內(nèi)存溢出問題,因為如果其他很多對象像A一樣,那么內(nèi)存中將會有很多不能被回收的對象,這將消耗大量內(nèi)存空間。
也有可能的情況是B持有了大量對其他對象的引用。這些被B引用的對象同樣不會被回收掉。所有這些未使用的對象將會消耗寶貴的內(nèi)存空間。

2015710112710820.jpeg (650×508)

 如何預(yù)防內(nèi)存泄漏?

如下是一些預(yù)防內(nèi)存泄漏的快速技巧:

1、留意集合類,比如HashMap,ArrayList等等,因為他們是內(nèi)存泄漏經(jīng)常發(fā)生的地方。當(dāng)它們被聲明為靜態(tài)對象時,他們的生命周期就和應(yīng)用的生命周期一樣長。

2、留意事件監(jiān)聽器和回調(diào)。如果一個類注冊了監(jiān)聽器,但當(dāng)該類不再被使用后沒有注銷監(jiān)聽器,可能會發(fā)生內(nèi)存泄漏。

3、“如果一個類管理自己的內(nèi)存,程序員應(yīng)該警惕內(nèi)存泄漏。”[1],很多時候?qū)ο笾械闹赶蚱渌麑ο蟪蓡T變量需要設(shè)置成null(才能被回收)。

相關(guān)文章

  • java正則表達(dá)式解析html示例分享

    java正則表達(dá)式解析html示例分享

    這篇文章主要介紹了java正則表達(dá)式解析html示例,用到獲取url的正則表達(dá)式,獲取圖片的正則表達(dá)式,需要的朋友可以參考下
    2014-02-02
  • 詳細(xì)總結(jié)Java中常用的原子類

    詳細(xì)總結(jié)Java中常用的原子類

    今天給大家總結(jié)了一下Java常用的原子類,文中有非常詳細(xì)的介紹及代碼示例,對正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • @FeignClient?path屬性路徑前綴帶路徑變量時報錯的解決

    @FeignClient?path屬性路徑前綴帶路徑變量時報錯的解決

    這篇文章主要介紹了@FeignClient?path屬性路徑前綴帶路徑變量時報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 在Idea2020.1中使用gitee2020.1.0創(chuàng)建第一個代碼庫的實現(xiàn)

    在Idea2020.1中使用gitee2020.1.0創(chuàng)建第一個代碼庫的實現(xiàn)

    這篇文章主要介紹了在Idea2020.1中使用gitee2020.1.0創(chuàng)建第一個代碼庫的實現(xiàn),文中通過圖文示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • JAVA設(shè)計模式之備忘錄模式原理與用法詳解

    JAVA設(shè)計模式之備忘錄模式原理與用法詳解

    這篇文章主要介紹了JAVA設(shè)計模式之備忘錄模式,簡單說明了備忘錄模式的概念、原理并結(jié)合實例形式分析了java備忘錄模式的具體定義及使用方法,需要的朋友可以參考下
    2017-08-08
  • RocketMQ中的NameServer詳細(xì)解析

    RocketMQ中的NameServer詳細(xì)解析

    這篇文章主要介紹了RocketMQ中的NameServer詳細(xì)解析,NameServer是一個非常簡單的Topic路由注冊中心,支持Broker的動態(tài)注冊與發(fā)現(xiàn),因此不能保證NameServer的一致性,需要的朋友可以參考下
    2024-01-01
  • 深入學(xué)習(xí)java ThreadLocal的源碼知識

    深入學(xué)習(xí)java ThreadLocal的源碼知識

    ThreadLocal是一個本地線程副本變量工具類。主要用于將私有線程和該線程存放的副本對象做一個映射,各個線程之間的變量互不干擾,特別適用于各個線程依賴不通的變量值完成操作的場景。下面我們來詳細(xì)了解一下它吧
    2019-06-06
  • 深入理解Java中的弱引用

    深入理解Java中的弱引用

    這篇文章主要介紹了深入理解Java中的弱引用,本文講解了強(qiáng)引用、弱引用、引用隊列、四種引用、軟引用、虛引用等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • SpringCloud微服務(wù)續(xù)約實現(xiàn)源碼分析詳解

    SpringCloud微服務(wù)續(xù)約實現(xiàn)源碼分析詳解

    這篇文章主要介紹了SpringCloud微服務(wù)續(xù)約實現(xiàn)源碼分析,服務(wù)續(xù)期和服務(wù)注冊非常相似,服務(wù)注冊在Eureka?Client程序啟動之后開啟,并同時開啟服務(wù)續(xù)期的定時任務(wù)
    2022-11-11
  • Java線程中synchronized的用法與原理解析

    Java線程中synchronized的用法與原理解析

    這篇文章主要介紹了Java線程中synchronized的用法與原理解析,只要有線程,就會有并發(fā)的現(xiàn)象,也同時會產(chǎn)生數(shù)據(jù)不一致,那么對于需要使用同一個數(shù)據(jù)的兩個線程,就會產(chǎn)生沖突,那么就引出了鎖的概念,本篇會針對性的說下synchronized這個關(guān)鍵字,需要的朋友可以參考下
    2024-01-01

最新評論