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

簡單談?wù)凧ava垃圾回收

 更新時間:2016年05月22日 12:27:06   作者:weixueyuan  
本文是看了James Gosling的<<Java程序設(shè)計語言>>后結(jié)合自己的一些項目經(jīng)驗,簡單總結(jié)下關(guān)于java的垃圾回收問題的看法,有需要的小伙伴可以參考下

好久沒看關(guān)于java的書了,最近,看了James Gosling的<<Java程序設(shè)計語言>>,做了一些讀書筆記。這部分是關(guān)于垃圾回收的。

一. 垃圾回收

對象是使用new創(chuàng)建的,但是并沒有與之相對應(yīng)的delete操作來回收對象占用的內(nèi)存。當(dāng)我們完成對某個對象的使用時,只需停止該對象的引用:

->將引用改變?yōu)橹赶蚱渌麑ο?br /> ->將引用指向null
->從方法中返回, 使得該方法的局部變量不復(fù)存在

要點:

->當(dāng)我們從任何可執(zhí)行代碼都無法到達(dá)某個對象時,它所占用的空間就可以被回收。
->垃圾回收意味著我們永遠(yuǎn)不用擔(dān)心出現(xiàn)虛懸引用(dangling reference)。虛懸引用,指得是引用已經(jīng)被刪除的內(nèi)存空間。在那些程序員可以直接控制何時刪除對象的系統(tǒng)中,會存在這樣的問題。
->垃圾回收器模型:引用計數(shù)器法(不能解決循環(huán)引用),標(biāo)記-清除(mark-and-sweep)。

二. 總結(jié)

finalize方法

->在垃圾回收器確定該對象是不可達(dá)的且該對象的空間將被回收之后,垃圾回收器就會調(diào)用這個方法。
->這個方法可以清除該對象所使用的所有非內(nèi)存資源,對每一個對象最多只能調(diào)用一次,即使在這個方法的執(zhí)行使得該對象重新變?yōu)榭蛇_(dá)之后又馬上會再次變?yōu)椴豢蛇_(dá)的情況下,該方法也只能調(diào)用一次。
->finalize方法可以在任何特定的時間段內(nèi)被調(diào)用,它也可能永遠(yuǎn)不會被調(diào)用(java虛擬機(jī)結(jié)束)。

覆寫finalize方法

->當(dāng)一個對象變成垃圾時,它所引用的其他對象也很有可能會變成垃圾。這些垃圾可能在調(diào)用我們編寫的finalize方法之前就已經(jīng)被終結(jié)了,因此它們可能處于不可預(yù)知的狀態(tài)。
->覆寫finalize方法是,加上super.finalize方法。最好加在finally字句里面。保證其超類中聲明的部分內(nèi)容也可以被終結(jié)。

三. 與垃圾回收器交互的相關(guān)類和方法

類:Runtime.getRuntime(), System
方法:gc(), runFinalization(), freeMemory(), totalMemory(), maxMemory()
System類支持靜態(tài)的gc()和runFinalization()方法,它們將調(diào)用當(dāng)前Runtime對象上的相應(yīng)方法。

四. 可達(dá)性狀態(tài)和引用對象

對象只有在沒有任何引用指定它的時候才可以被當(dāng)作垃圾回收,但有時我們可能希望在仍舊有選定引用指向?qū)ο髸r,將該對象作為垃圾回收掉。

引用對象的唯一用途就是維護(hù)對另一個被稱為指稱物(referent)的對象的引用。通常我們通過字段或者局部變量來維護(hù)對對象的引用,但是現(xiàn)在我們可以維護(hù)對引用對象的直接引用,而該引用對象包裝了我們實際需要的對象。垃圾回收器可能判斷出對某個對象的殘留引用是否都是經(jīng)由引用對象面引用到該對象的,因此它可以決定是否要回收該對象。引用對象的強(qiáng)度將決定垃圾回收器的行為,普通的引用都是強(qiáng)度最大的引用。

Reference類

->包:java.lang.ref
->典型方法: get(), clear(), enqueue(), isEnqueued()

引用和可達(dá)性強(qiáng)度

->對象是強(qiáng)可達(dá)的(strongly reachable):普通的引用
->對象是軟可達(dá)的(softly reachable):SoftReference
->對象是弱可達(dá)的(weakly reachable):WeakReference
->對象是虛可達(dá)的(phantom reachable):PhantomReference
->對象是不可達(dá)的:沒有引用鏈接
一旦對象變?yōu)槿蹩蛇_(dá)的(或者列弱),它就可以被終結(jié)。如果在終結(jié)之后該對象是不可達(dá)的,那么它就可以被回收了。

對象可達(dá)性階段會觸發(fā)垃圾回收器對相關(guān)的引用對象類型做出適當(dāng)?shù)男袨椋?br />

->軟可達(dá)對象可能會任憑垃圾回收器去回收。我們可確定的是所有對軟可達(dá)對象的SoftReference都會在拋出outofMemoryError錯誤這前被清除。
->弱可達(dá)對象將會被垃圾回收器回收。
->虛可達(dá)對象并不是真正意義上的可達(dá),因為無法通過PhantomReference訪問其指稱對象,其get方法總是返回null。但是虛引用的存在可以防止對象在顯式清除虛引用之前被回收。虛引用使我們可以處理那些finalize方法已經(jīng)被調(diào)用過的對象,從而可以安全地認(rèn)為它們是"死"的。

相關(guān)文章

  • 并發(fā)編程之Java內(nèi)存模型順序一致性

    并發(fā)編程之Java內(nèi)存模型順序一致性

    這篇文章主要介紹了并發(fā)編程Java內(nèi)存模型順序一致性,順序一致性內(nèi)存模型是一個理論參考模型,處理器的內(nèi)存模型和編程語言的內(nèi)存模型都會以順序一致性內(nèi)存模型作為參照,下面我們一起進(jìn)入文章看看學(xué)校內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • Java文件上傳下載、郵件收發(fā)實例代碼

    Java文件上傳下載、郵件收發(fā)實例代碼

    這篇文章主要介紹了Java文件上傳下載、郵件收發(fā)實例代碼的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • java繪制哆啦A夢 超可愛

    java繪制哆啦A夢 超可愛

    這篇文章主要介紹了java繪制哆啦A夢,特別的可愛,文中示例代碼介紹的也非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • java安全?ysoserial?CommonsCollections1示例解析

    java安全?ysoserial?CommonsCollections1示例解析

    這篇文章主要介紹了java安全?ysoserial?CommonsCollections1示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • MybatisPlus如何自動生成映射文件

    MybatisPlus如何自動生成映射文件

    這篇文章主要介紹了MybatisPlus如何自動生成映射文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringCloud之Hystrix的詳細(xì)使用

    SpringCloud之Hystrix的詳細(xì)使用

    熔斷機(jī)制是應(yīng)對雪崩效應(yīng)的一種微服務(wù)鏈路保護(hù)機(jī)制,當(dāng)扇出鏈路的某個微服務(wù)出錯不可用或者響應(yīng)時間太長,會進(jìn)行服務(wù)的降級,進(jìn)而熔斷該節(jié)點微服務(wù)的調(diào)用,快速返回錯誤的相應(yīng)信息,本文重點給大家介紹SpringCloud Hystrix使用,感興趣的朋友一起看看吧
    2022-01-01
  • Spring工廠方法創(chuàng)建(實例化)bean實例代碼

    Spring工廠方法創(chuàng)建(實例化)bean實例代碼

    這篇文章主要介紹了Spring工廠方法創(chuàng)建bean實例代碼,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Java中兩個List之間的比較方法(差集、交集和并集)

    Java中兩個List之間的比較方法(差集、交集和并集)

    在業(yè)務(wù)的開發(fā)過程中會經(jīng)常用到兩個List集合相互取值的情況,下面這篇文章主要給大家介紹了關(guān)于Java中兩個List之間的比較方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Java軟件生產(chǎn)監(jiān)控工具Btrace使用方法詳解

    Java軟件生產(chǎn)監(jiān)控工具Btrace使用方法詳解

    這篇文章主要介紹了Java軟件生產(chǎn)監(jiān)控工具Btrace使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • JavaScript的基本類型值-String類型

    JavaScript的基本類型值-String類型

    String類型用于表示由零或多個16位Unicode字符組成的字符序列,即字符串。在JavaScript中沒有單個的字符型,都是字符串。這篇文章主要介紹了JavaScript的基本類型值String類型,需要的朋友可以參考下
    2017-02-02

最新評論