java 板


LINE

小弟我最近在研究SoftReference、WeakReference、PhantomReference等功能 SoftReference、WeakReference很好理解, 没什麽问题. 但我在研究PhantomReference时觉得我的code跟我对PhantomReference理解有点出入 以下是我测试的code, jvm 设定 -Xms5M -Xmx10M (有透过MBean确认过参数无误) (01) private volatile boolean isRun = true; (02) (03) private void test() throws InterruptedException { (04) ReferenceQueue<byte[]> rq = new ReferenceQueue<>(); (05) (06) pollingReferenceQueue(rq); // fork thread poll referenceQueue (07) (08) try { (09) List<Object> l = new ArrayList<>(); (10) (11) int times = 20; (12) long restMs = 1000; (13) for (int i = 1; i <= times; i++) { (14) byte[] buff = new byte[1024 * 1024]; (15) PhantomReference<byte[]> pr = new PhantomReference<>(buff, rq); (16) l.add(pr); // 这边打开让pr被强引用, rq才会收到资料?? (17) (18) System.gc(); (19) (20) System.out.println("<main> " + "(" + i + ") " + pr); (21) (22) Thread.sleep(restMs); (23) } (24) (25) } finally { (26) isRun = false; (27) } (28) } (29) (30) private void pollingReferenceQueue(ReferenceQueue<byte[]> rq) { (31) new Thread(() -> { (32) while (this.isRun) { (33) Reference<? extends byte[]> v = rq.poll(); (34) (35) if (v == null) { (36) System.out.println("<poll> " + null); (37) } else { (38) System.out.println("<poll> recycle " + v.toString()); (39) } (40) (41) try { (42) Thread.sleep(100); (43) } catch (InterruptedException e) { (44) e.printStackTrace(); (45) } (46) } (47) }, "polling").start(); (48) } 我的问题在第16行, 当没有把pr给强引用的时候, 当要被GC的时候并不会丢到rq里? 但当pr给强引用的时候, 要被回收时就会出现在rq里? 我对ReferenceQueue的理解是 "当Reference所参照的物件准备要回收的时候, 其Reference会先放置ReferenceQueue" "因此可以利用ReferenceQueue得知有某些物件没有人使用准备要被回收了!" 所以我不能理解的是为什麽pr被强引用之後准备回收才会被丢到rq里? 但pr没有被强引用要被回收时却没有丢到rq里? (因为没有OOM) 不晓得有没有大大能解惑, 是我理解错误还是我的code在使用上就错了? -- 你只是大大的世界中小小的一个岛屿 在你怀中长大的我们 从未忘记 我要用全部的力气唱出对你的深情 歌声中 只是真心的赞美 929 吴志宁 也有感谢和依恋 疼惜和忧烦 全心全意爱你 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 110.26.10.55 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1594536845.A.512.html ※ 编辑: NullLife (110.26.10.55 台湾), 07/12/2020 14:55:54 ※ 编辑: NullLife (110.26.10.55 台湾), 07/12/2020 15:01:34
1F:→ bitlife: pr在回圈内,每绕一次就生命周期结束,list救了它.把pr移出 07/13 09:22
2F:→ bitlife: 回圈再试看看 07/13 09:22
3F:推 tw11509: https://i.imgur.com/zSwQauH.jpg 我看文件上面写的, 07/13 11:23
4F:→ tw11509: 感觉跟这个有关 07/13 11:23
5F:→ tw11509: https://bit.ly/3foeCVf 提供一下文件连结 07/13 11:30
啊啊啊 看起来就是它耶!! 原来doc就有描述了QQ 感谢大大 ※ 编辑: NullLife (125.227.32.37 台湾), 07/16/2020 18:57:30
6F:→ bitlife: 今天发现我第一行写的不够清楚,应该是把pr的宣告移出回圈 07/16 19:52
7F:→ bitlife: ,看到原po有回覆才发现当初写得太过简略 XD 07/16 19:52
8F:推 tw11509: B大的答案我有试过,看起来还是一样,看来就像文件所说 07/16 20:22
9F:→ tw11509: 只要pr变成unreachable,就不会被加入到q 07/16 20:22
10F:→ tw11509: ueue中 07/16 20:22
11F:→ bitlife: 感觉是如果不用list来记录每次new的PhantomReference,只 07/17 09:30
12F:→ bitlife: 会记录到最後一次的new PhantomReference(.),而那次回圈 07/17 09:30
13F:→ bitlife: 会结束,list l 和pr的生命周期也结束,而gc只是标志将执行 07/17 09:31
14F:→ bitlife: 并非呼叫当下立即执行,因此最後一次gc实际执行时,最後一 07/17 09:31
15F:→ bitlife: 次的new PhantomReference也unreachable了.所以l的效果是 07/17 09:32
16F:→ bitlife: 让前面几次的gc来得及回报前几次的pr. 要确保gc实际执行 07/17 09:33
17F:→ bitlife: 时pr还活着,光移出回圈还不够,可能要变field,而且应该用 07/17 09:34
18F:→ bitlife: array或list,以记录每次的new PhantomReference(.) 07/17 09:34
19F:推 tw11509: 我的看法大致跟B大一样,重点就是确保pr在GC时还可 07/17 16:00
20F:→ tw11509: 以被reach到就可以了 07/17 16:00







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP