淺談Java 中的引用類型
Java 中的引用類型:強(qiáng)引用、軟引用、弱引用和虛引用
強(qiáng)引用
如 Object object = new Object(),那 object 就是一個(gè)強(qiáng)引用,如果一個(gè)對(duì)象具有強(qiáng)引用,垃圾回收器就永遠(yuǎn)不會(huì)回收它。
軟引用
軟引用用來描述一些還有用但非必需的對(duì)象。在內(nèi)存即將發(fā)生內(nèi)存溢出之前,會(huì)把這些對(duì)象列進(jìn)回收范圍之中進(jìn)行二次垃圾回收。如果這次回收還沒有足夠內(nèi)存,才會(huì)發(fā)生內(nèi)存溢出現(xiàn)象。
另:軟引用可用來實(shí)現(xiàn)內(nèi)存敏感的高速緩存。
弱引用
用來描述非必需的對(duì)象。被弱引用關(guān)聯(lián)的對(duì)象只能存活到下一次垃圾收集發(fā)生之前。當(dāng)垃圾回收時(shí),無論當(dāng)前內(nèi)存是否足夠,都將回收被弱引用關(guān)聯(lián)的對(duì)象。
虛引用
最弱的一種引用關(guān)系。無法通過一個(gè)虛引用獲得一個(gè)對(duì)象實(shí)例;一個(gè)對(duì)象是否有虛引用,都不會(huì)對(duì)其生存周期構(gòu)成影響。
設(shè)置虛引用的唯一目的是在垃圾回收時(shí)收到一個(gè)系統(tǒng)通知。
虛引用與軟引用、弱引用的一個(gè)區(qū)別在于:虛引用必須和引用隊(duì)列(ReferenceQueue)聯(lián)合使用。當(dāng)垃圾回收器準(zhǔn)備回收一個(gè)對(duì)象時(shí),如果發(fā)現(xiàn)它還有虛引用,會(huì)在垃圾回收之前,將該引用加入到與之對(duì)應(yīng)關(guān)聯(lián)的引用隊(duì)列中。程序通過判斷引用隊(duì)列中是否已經(jīng)加入了該虛引用,來了解被引用的對(duì)象是否將被垃圾回收。程序如果已經(jīng)發(fā)現(xiàn)該虛引用被加入了引用隊(duì)列中,就會(huì)將所引用的對(duì)象的內(nèi)存被回收之前采取必要的行動(dòng)。
軟引用、弱引用的使用場(chǎng)景原理分析:實(shí)現(xiàn)內(nèi)存敏感的高速緩存。
相關(guān)文章
Java深入了解數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列的詳解
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)中的棧與隊(duì)列,在Java的時(shí)候,對(duì)于棧與隊(duì)列的應(yīng)用需要熟練的掌握,這樣才能夠確保Java學(xué)習(xí)時(shí)候能夠有扎實(shí)的基礎(chǔ)能力。本文小編就來詳細(xì)說說Java中的棧與隊(duì)列,需要的朋友可以參考一下2022-01-01Java藍(lán)橋杯實(shí)現(xiàn)線段和點(diǎn)
本文主要介紹Java藍(lán)橋杯實(shí)現(xiàn)線段和點(diǎn)的內(nèi)容,感興趣的小伙伴可以參考下文2021-08-08idea不能自動(dòng)補(bǔ)全yml配置文件的原因分析
這篇文章主要介紹了idea不能自動(dòng)補(bǔ)全yml配置文件的原因,通過添加yml文件為配置文件能夠很快的解決,具體解決步驟跟隨小編一起通過本文學(xué)習(xí)下吧2021-06-06MyBatis-Plus中AutoGenerator的使用案例
AutoGenerator是MyBatis-Plus的代碼生成器,通過?AutoGenerator?可以快速生成?Pojo、Mapper、?Mapper?XML、Service、Controller?等各個(gè)模塊的代碼,這篇文章主要介紹了MyBatis-Plus中AutoGenerator的詳細(xì)使用案例,需要的朋友可以參考下2023-05-05SpringBoot 整合 Netty 多端口監(jiān)聽的操作方法
Netty提供異步的、基于事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用程序框架,用以快速開發(fā)高性能、高可靠性的網(wǎng)絡(luò) IO 程序,是目前最流行的 NIO 框架,這篇文章主要介紹了SpringBoot 整和 Netty 并監(jiān)聽多端口,需要的朋友可以參考下2023-10-10