日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 幽灵引用_Java 幽灵引用的作用

發布時間:2023/12/10 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 幽灵引用_Java 幽灵引用的作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:Java 幽靈引用的作用

來源:imzoer,

blog.csdn.net/imzoer/article/details/8044900

找實習的時候,面試大摩,就遇到了這個問題,當時真不該跟面試官交流這個內容的。

垃圾收集過程中,對象的可觸及狀態改變的時候,可以把引用對象和引用隊列關聯起來【這里說的關聯,是說垃圾收集器會把要回收的對象添加到引用隊列ReferenceQueue】,這樣在可觸及性發生變化的時候得到“通知”。

當垃圾收集器對加入隊列的對象改變可觸及性的時候,就可以收到異步通知了。

看下面的代碼:

package static_;

import java.lang.ref.PhantomReference;

import java.lang.ref.Reference;

import java.lang.ref.ReferenceQueue;

import java.lang.reflect.Field;

public class Test {

public static boolean isRun = true;

@SuppressWarnings("static-access")

public static void main(String[] args) throws Exception {

String abc = new String("abc");

System.out.println(abc.getClass() + "@" + abc.hashCode());

final ReferenceQueue referenceQueue = new ReferenceQueue();

new Thread() {

public void run() {

while (isRun) {

Object obj = referenceQueue.poll();

if (obj != null) {

try {

Field rereferent = Reference.class

.getDeclaredField("referent");

rereferent.setAccessible(true);

Object result = rereferent.get(obj);

System.out.println("gc will collect:"

+ result.getClass() + "@"

+ result.hashCode() + "t"

+ (String) result);

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

}.start();

PhantomReference abcWeakRef = new PhantomReference(abc,

referenceQueue);

abc = null;

Thread.currentThread().sleep(3000);

System.gc();

Thread.currentThread().sleep(3000);

isRun = false;

}

}

我們用一個線程檢測referenceQueue里面是不是有內容,如果有內容,打印出來queue里面的內容。

從這個例子中,我們可以看出來,虛引用的作用是,我們可以聲明虛引用來引用我們感興趣的對象,在gc要回收的時候,gc收集器會把這個對象添加到referenceQueue,這樣我們如果檢測到referenceQueue中有我們感興趣的對象的時候,說明gc將要回收這個對象了。此時我們可以在gc回收之前做一些其他事情,比如記錄些日志什么的。

感謝藍大牛分享下面的例子。

在java中,finalize函數本來是設計用來在對象被回收的時候來做一些操作的(類似C++的析構函數)。但是對象被GC什么時候回收的時間,卻是不固定的,這樣finalize函數很尷尬。虛引用可以用來解決這個問題。

在創建虛引用的時候必須傳入一個引用隊列。在一個對象的finalize函數被調用之后,這個對象的幽靈引用會被加入到引用隊列中。通過檢查隊列的內容就知道對象是不是要準備被回收了。

幽靈引用的使用并不多見,主要是實現細粒度的內存控制。比如下面代碼實現一個緩存。程序在確認原來的對象要被回收之后,才申請內存創建新的緩存。

在上面的代碼中,每次申請新的緩存的時候,都要確保之前的字節數組被成功回收。引用隊列的remove方法會阻塞直到虛引用被加入到引用隊列中。【只有對象在內存中被移除之后才會進入引用隊列中】。

不過注意,這種方式可能會導致gc次數過多,程序吞吐量下降。

另外注意,system.gc調用僅僅是建議虛擬機進行回收,并不一定馬上會進行gc。返回搜狐,查看更多

責任編輯:

總結

以上是生活随笔為你收集整理的java 幽灵引用_Java 幽灵引用的作用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一区二区麻豆 | 91久久久久国产一区二区 | 国产精品无码久久av | 国产精品入口麻豆 | 在线免费观看视频黄 | 色啦啦视频 | 国产伦子伦对白视频 | 午夜精品一区二区三区在线播放 | 亚洲黄色中文字幕 | 久久这里只有精品国产 | 日韩精品国产AV | 欧洲成人在线观看 | 亚洲精品无码不卡在线播he | 亚洲精品va | 18禁裸乳无遮挡啪啪无码免费 | 天天躁日日躁狠狠躁av麻豆男男 | 哪里可以免费看av | 99爱精品 | 成人在线国产 | 久久午夜av | 亚洲第一第二区 | 国产视频h | 国产精品久久久久久久久久久免费看 | 欧美人成在线视频 | 国产成人久久婷婷精品流白浆 | 国产爆操视频 | 国产在线视频一区二区三区 | 亚洲一区在线观看视频 | 国产露脸无套对白在线播放 | 超碰成人在线观看 | 国产中文字幕免费 | 久久久久无码精品国产sm果冻 | 爱情岛论坛自拍亚洲品质极速最新章 | 日本精品专区 | 亚洲第一成人网站 | 精品一区二区三区欧美 | 日本少妇色 | 久久久亚洲一区二区三区 | 夜色综合网 | 3d动漫精品啪啪一区二区竹菊 | 欧美精品日韩精品 | 91精品国产一区二区三竹菊影视 | 女性裸体瑜伽无遮挡 | 成人免费看片视频 | 啪啪激情网 | 波多野吉衣毛片 | 亚洲免费黄色片 | 国产丰满麻豆 | 国产精品二区视频 | 国产麻豆影视 | 人超碰| 日韩国产欧美 | 91精品网站| www.欧美色| 自拍偷拍三级 | 中文字幕视频在线观看 | 狠狠躁狠狠躁视频专区 | 欧美日韩高清一区二区三区 | 激情丁香六月 | 91久久爽久久爽爽久久片 | av毛片大全 | 国产精品视频免费 | 欧美黑人疯狂性受xxxxx野外 | 久久黄色免费网站 | 麻豆影视网站 | 亚洲av无码不卡 | 国产精品wwww | 中文字幕人乱码中文字 | 男女做激情爱呻吟口述全过程 | 综合色天天 | 亚洲一区二区三区欧美 | 小罗莉极品一线天在线 | 日韩精品小视频 | 国产视频1区2区 | 欧美成人久久久 | 欧美日韩一卡二卡三卡 | 欧美老肥婆性猛交视频 | 国产视频一区二区 | 亚洲综合p | 91久久久久久久久久久久久 | 玩日本老头很兴奋xxxx | 久久久久久久久久久91 | 欧美日韩视频一区二区三区 | 日韩精品一区二区三区在线观看 | 亚洲精品国产精品国自产网站按摩 | 毛片天堂 | aaaaaa毛片| 天天曰天天 | 午夜爱爱影院 | 九九亚洲精品 | 成人深夜视频 | 国产99999 | 自拍偷拍激情小说 | 久久新视频 | 肉肉视频在线观看 | 色呦呦视频在线观看 | 精品国产一区二区三区久久久久久 | 午夜影院在线播放 | 亚洲一区二区影视 |