Java引用相关内容有哪些
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,本篇内容介绍了"Java引用相关内容有哪些"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、引用的定
千家信息网最后更新 2025年11月13日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安全错误
数据库的锁怎样保障安全
守望先锋服务器
数据库中什么叫聚集
sql数据库文件容量很大
软件工程网络技术方向
敏捷软件开发中文
1tb服务器硬盘
江苏外贸软件开发
steam2k22连接不上服务器
华为服务器开启超线程命令
服务器管理口是哪个
数据库考纲是什么意思
济南联祥网络技术公司怎么样
网络安全教育手抄报 文字
怎么使用数据库画图
数据库 查询
网络安全技术爱好者
《网络技术应用》 教科版
数据服务器和通讯管理机
捣固车数据库
开传奇私服服务器
车载网络技术考试题库
云服务器强制重启会数据丢失么
部队网络安全无小事
cf更新后地图工坊服务器
华为通信网络技术产品优势
寝室网络安全短视频
网络安全教育专题会议
邮储银行软件开发中心入职
局域网网络技术
软件开发忙不