网站首页 > 精选教程 正文
强引用(java默认):可以直接访问目标对象。所指向的对象在任何时候都不会被系统回收。JVM宁愿抛出OOM异常,也不会回收强引用所指向的对象。可能导致内存泄漏。
Person person = new Person("fsx", 18);
System.out.println(person); //强引用:直接使用
软引用:是用来描述一些还有用但并非必须的对象。对于软引用对象,如果内存充足(注意此处对充足二字的理解)gc不会管它,如果内存不够了,它就不能幸免了。软引用可用来实现内存敏感的高速缓存。软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。
public static void main(String[] args) throws InterruptedException {
//定义一个引用队列
ReferenceQueue<Person> queue = new ReferenceQueue<>();
Person obj = new Person("fsx", 18);
SoftReference sf = new SoftReference<>(obj, queue); // 通过构造函数把Queue传进去 让此软引用关联上队列
obj = null; //置为null 让obj被垃圾回收期回收
System.gc();
TimeUnit.SECONDS.sleep(2);
byte[] bytes = new byte[1024 * 100];
System.gc();
TimeUnit.SECONDS.sleep(1); // 把问题放大,让gc过来回收 保证obj已经被回收
System.out.println("是否被回收:" + sf.get());
//队列里存在 说明对象马上就要被回收了 所以顺势也把软引用对象干掉
if ((sf = (SoftReference<Person>) queue.poll()) != null) {
System.out.println("sf置为null,释放内存");
sf = null;
}
}
猜你喜欢
- 2024-11-14 Java强引用、软引用、弱引用和虚引用使用场景
- 2024-11-14 Java中的四种引用类型的区别与联系?
- 2024-11-14 Python 中弱引用的神奇用法与原理探析
- 2024-11-14 Java强软弱虚引用 java中强引用,弱引用,虚引用
- 2024-11-14 JVM中如何理解强引用、软引用、弱引用、虚引用?
- 2024-11-14 吃透源码的每一个细节和设计原理--ThreadLocal
- 2024-11-14 Java,基本类型和引用类型,强引用、软引用、弱引用、虚引用
- 2024-11-14 一文带你理解jvm之强软弱虚引用 强软弱虚 程序中应用
- 2024-11-14 面试被问java如何实现强引用、软引用、弱引用、虚引用你知道么?
- 2024-11-14 「教3妹学java」11.强引用,弱引用,软引用和虚引用的区别是什么
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)