Java引用相关内容有哪些
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,本篇内容介绍了"Java引用相关内容有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、引用的定
千家信息网最后更新 2025年01月21日Java引用相关内容有哪些
本篇内容介绍了"Java引用相关内容有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、引用的定义
在JDK 1.2以前,Java中的引用定义很传统:如果reference类型的数据存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。
二、问题
当描述这样的一类对象:当内存空间还足够时,则能保留在内存之中,如果内存空间在进行垃圾收集后还是非常紧张,则可以抛弃这些对象。此时的引用就显得过于狭隘。因此在JDK 1.2之后,Java堆引用的概念进行了扩充。
三、引用的分类
回收时机 | |||
强引用 | Strong Reference | 类似Object obj = new Object() | 只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象 |
软引用 | Soft Reference | 描述一些还有用但并非必须的对象 | 在系统将要发生内存溢出的异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常 |
弱引用 | Weak Reference | 用来描述非必须对象,强度比软引用更弱。被弱引用关联的对象只能生存到下一次垃圾收集发生之前 | 当垃圾收集器工作时,无论当前内存是否足够,都会回收掉纸杯弱引用关联的对象 |
虚引用 | Phantom Reference | 又称为幽灵引用或幻影引用,最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。 | 为一个对象设置虚引用关联的卫衣目的就是能在这个对象被收集器回收时收到一个系统通知 |
四、应用场景
1.强引用
最常用的,应用场景最多,everywhere
2.软引用
只有将要发生OOM的时候,才会主动回收,应用在一些内存限制比较大的应用内,避免发生OOM。
3.弱引用
不管是young gc 还是 full gc 都会回收弱引用的对象。当你想引用一个对象,但是这个对象有自己的生命周期,你不想介入这个对象的生命周期,这时候你就是用弱引用。
4.虚引用
在回收时可以检测到,虚引用主要用来跟踪对象被垃圾回收器回收的活动。
五、源码
package org.pdool.ref;import java.lang.ref.Reference;import java.lang.ref.ReferenceQueue;import java.lang.ref.WeakReference;import java.util.LinkedList;public class ReferenceTest { private static ReferenceQueue rq = new ReferenceQueue(); public static void checkQueue() { Reference extends VeryBig> ref = null; while ((ref = rq.poll()) != null) { // 只留有引用,没有对象 System.out.println("In queue: " + ((VeryBigWeakReference) (ref)).id); } } public static void main(String args[]) { int size = 3; LinkedList> weakList = new LinkedList>(); for (int i = 0; i < size; i++) { weakList.add(new VeryBigWeakReference(new VeryBig("Weak " + i), rq)); System.out.println("Just created weak: " + weakList.getLast()); } System.gc(); try { // 暂停6s,让上面的垃圾回收线程运行完成 Thread.currentThread().sleep(6000); } catch (InterruptedException e) { e.printStackTrace(); } checkQueue(); }}class VeryBig { public String id; // 占用空间,让线程进行回收 byte[] b = new byte[2 * 1024]; public VeryBig(String id) { this.id = id; } protected void finalize() { System.out.println("Finalizing VeryBig " + id); }}class VeryBigWeakReference extends WeakReference { public String id; public VeryBigWeakReference(VeryBig big, ReferenceQueue rq) { super(big, rq); this.id = big.id; } protected void finalize() { System.out.println("Finalizing VeryBigWeakReference " + id); }}
"Java引用相关内容有哪些"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
对象
内存
垃圾
内容
应用
空间
收集器
关联
之中
代表
周期
场景
就是
更多
生命
知识
系统
线程
还是
狭隘
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华为数据库安全
战地3服务器
服务器 台式机的区别
杭州棋牌软件开发公司有哪些
福建定制化国产服务器
华富基金网络安全
清理腾讯通服务器缓存
白银快办软件开发公司
java 数据库历史改动记录
检查不到数据服务器
网络安全人才中心二期临空港
国际经贸法律法规数据库
服务器dns怎么设置
我的南京上传图片显示服务器已满
属于网络安全主题责任
计算机网络技术毕业就业渠道
绍兴高防御服务器124.
软件开发策划书
张晓月中信银行北京软件开发
为什么r号服务器登陆错误了
兰州市软件开发哪家公司好
软件开发管理者总是犯错
用服务器怎么玩王者
java操控数据库
自己架设网络服务器
服务器状态不好怎么修复
emby安卓怎么添加服务器
数据库查询最近插入记录
陕西宝德通网络技术
服务器的控制器损坏有什么影响