Java中幾個(gè)Reference常見的作用詳解
前言
Java中幾個(gè)Reference作用,也是面試的時(shí)候經(jīng)常問到的問題,以前總是記一次忘一次,現(xiàn)在有時(shí)間,索性寫個(gè)demo測(cè)試一把。下面來一起看看詳細(xì)的介紹:
具體代碼如下:
JVM 參數(shù): -Xmx10m -Xms5m -XX:+PrintGC
SoftReference的時(shí)候:
weakReference的時(shí)候:
StrongReference:
由于strong是JVM默認(rèn)的,這里就不做了,直接就是一點(diǎn)都不會(huì)被回收,直至OOM
PhantomReference:
虛引用并不會(huì)改變內(nèi)存回收機(jī)制,只是在回收的時(shí)候放到ReferenceQueue里通知用戶可做一些額外操作,比如打印日志等
如下代碼,本質(zhì)上byte[]還是一個(gè)強(qiáng)引用的。
輸出:
總結(jié)一下:
- StrongReference:JVM默認(rèn),除非GC時(shí)已無任何對(duì)象引用,否則即便是OOM也不會(huì)回收
- WeakReference:一旦沒有被引用,GC時(shí)就會(huì)回收
- SoftReference:和strong一樣,除非GC時(shí)已無任何對(duì)象引用,否則....在即將OOM前才會(huì)被回收,所以SoftReference一般可以用來做緩存
- sun.nio.ch.Util中就有private static ThreadLocal<SoftReference<SelectorWrapper>> localSelector
- = new ThreadLocal<SoftReference<SelectorWrapper>>();
- 用于臨時(shí)的Selector。
- PhantomReference:通過構(gòu)造函數(shù)的ReferenceQueue作為一個(gè)通知,用來在對(duì)象被回收時(shí)做額外的操作。
好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Spring Cache實(shí)現(xiàn)緩存技術(shù)
在面對(duì)公司緩存技術(shù)混亂時(shí),張三基于Spring框架自研緩存解決方案,展現(xiàn)了他的專業(yè)技術(shù)能力和積極工作態(tài)度,他通過問題診斷、技術(shù)選型、編碼測(cè)試、文檔編寫和部署監(jiān)控等一系列步驟,確保了新緩存系統(tǒng)的功能正確性和性能穩(wěn)定性2024-10-10Java中BigDecimal,DateFormatter?和迭代器的"陷阱"
這篇文章主要介紹了Java中BigDecimal,DateFormatter?和迭代器的"陷阱",文章圍繞主題展開詳細(xì)的內(nèi)容介紹,感興趣的小伙伴可以參考一下2022-06-06Swagger注解-@ApiModel和@ApiModelProperty的用法
這篇文章主要介紹了Swagger注解-@ApiModel和@ApiModelProperty的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06IDEA插件之mybatisx插件使用教程(超詳細(xì)!)
MybatisX 是一款基于IDEA的快速開發(fā)插件,為效率而生,下面這篇文章主要給大家介紹了關(guān)于IDEA插件之mybatisx插件使用的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06Java實(shí)現(xiàn) 基于密度的局部離群點(diǎn)檢測(cè)------lof算法
這篇文章主要介紹了Java實(shí)現(xiàn) 基于密度的局部離群點(diǎn)檢測(cè)------lof算法,本文通過算法概述,算法Java源碼,測(cè)試結(jié)果等方面一一進(jìn)行說明,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07在SpringBoot項(xiàng)目中使用Java8函數(shù)式接口的方法示例
在Spring Boot項(xiàng)目中,Java 8 的函數(shù)式接口廣泛用于實(shí)現(xiàn)各種功能,如自定義配置、數(shù)據(jù)處理等,函數(shù)式接口在Spring Boot中非常有用,本文展示了在SpringBoot項(xiàng)目中使用Java8的函數(shù)式接口的方法示例,需要的朋友可以參考下2024-03-03Java利用位運(yùn)算實(shí)現(xiàn)加減乘除的方法詳解
我們經(jīng)常使用的加減乘除,我們所看到的只是表面的效果,那么加減乘除在底層究竟是怎么實(shí)現(xiàn)的?今天就讓我們一探究竟2022-08-08Java ArrayList的基本概念和作用及動(dòng)態(tài)數(shù)組的機(jī)制與性能
在Java中,ArrayList是一個(gè)實(shí)現(xiàn)了List接口的動(dòng)態(tài)數(shù)組,它可以根據(jù)需要自動(dòng)增加大小,因此可以存儲(chǔ)任意數(shù)量的元素,這篇文章主要介紹了探秘Java ArrayList的基本概念和作用及動(dòng)態(tài)數(shù)組的機(jī)制與性能,需要的朋友可以參考下2023-12-12Java實(shí)現(xiàn)遞歸查詢樹結(jié)構(gòu)的示例代碼
我們?cè)趯?shí)際開發(fā)中,肯定會(huì)用到樹結(jié)構(gòu),如部門樹、菜單樹等等。Java后臺(tái)利用遞歸思路進(jìn)行構(gòu)建樹形結(jié)構(gòu)數(shù)據(jù),返回給前端,能以下拉菜單等形式進(jìn)行展示。今天,咱們就來說說怎么樣將List集合轉(zhuǎn)換成TreeList2022-11-11