Java:对象的强、软、弱和虚引用的区别
import java.lang.ref.WeakReference;
public class ReferenceTest {
public static void main(String[] args) {
// 创建一个字符串对象
String str = new String("我爱学java");
// 创建弱引用,让此弱引用引用到"我爱学java"字符串
WeakReference wr = new WeakReference(str);
// 切断str和我爱学java字符串之间的引用
str = null;
// 去除弱引用所引用的对象
System.out.println(wr.get());
// 强制垃圾回收
System.gc();
// 调用finalize方法
System.runFinalization();
// 再次取出弱引用的对象
System.out.println(wr.get());
//=================================================================
Object obj = wr.get();
if (obj == null) {
// 重建一个
wr = new WeakReference(recreateIt());
obj =wr.get();
System.out.println(obj);
}
//再次切断
obj =null;
System.out.println(obj);
}
private static Object recreateIt() {
String str = new String("新的字符串对象");
return str;
}
}
(2)虚引用
import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference; public class PhantomReferenceTest { public static void main(String[] args) { // 创建一个字符串对象
String str = new String("我爱学java"); // 创建一个引用队列
ReferenceQueue rq = new ReferenceQueue();
// 创建一个虚引用,让虚引用 引用到"我爱学java"
PhantomReference pr = new PhantomReference(str, rq); // 切断str和我爱学java字符串之间的引用
str = null;
// 并不能通过虚引用获取被引用的对象,输出就为null
System.out.println(pr.get()); // 强制垃圾回收
System.gc();
// 调用finalize方法
System.runFinalization(); // 垃圾回收之后,虚引用将被放在引用队列中
//取出引用队列中最先进入队列引用与pr进行比较
System.out.println(rq.poll() == pr); } }
Java:对象的强、软、弱和虚引用的区别的更多相关文章
- 详解Java中对象的软、弱和虚引用的区别
对于大部分的对象而言,程序里会有一个引用变量来引用该对象,这是最常见的引用方法.除此之外,java.lang.ref包下还提供了3个类:SoftReference.WeakReference和Phan ...
- java中的强,软,弱,虚引用
引用的应用场景 我们都知道垃圾回收器会回收符合回收条件的对象的内存,但并不是所有的程序员都知道回收条件取决于指向该对象的引用类型.这正是Java中弱引用和软引用的主要区别. 如果一个对象只有弱引用指向 ...
- Java:对象的强、软、弱、虚引用
转自: http://zhangjunhd.blog.51cto.com/113473/53092 1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无 ...
- Java:对象的强、软、弱和虚引用
1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK ...
- Java对象的强、软、弱和虚引用详解
1.对象的强.软.弱和虚引用 转自:http://zhangjunhd.blog.51cto.com/113473/53092/ 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无 ...
- java基础知识再学习--集合框架-对象的强、软、弱和虚引用
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangjunhd.blog.51cto.com/113473/53092 本文 ...
- Java对象的强、软、弱和虚引用原理+结合ReferenceQueue对象构造Java对象的高速缓存器
//转 http://blog.csdn.net/lyfi01/article/details/6415726 1.Java对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变 ...
- Java:对象的强、软、弱和虚引用[转]
原文链接:http://zhangjunhd.blog.51cto.com/113473/53092/ 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法 ...
- Java对象的强、软、弱和虚引用+ReferenceQueue
Java对象的强.软.弱和虚引用+ReferenceQueue 一.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足 ...
随机推荐
- VS2010下连接Oracle数据库的方法
在vs2010下使用OleDB连接Oracle数据库 ——此方法不需要配置数据源. 1. 在“服务器资源管理器”中,选择“数据库连接”,右击,选择“添加连接”. 2. 出现下面的界面,并按图中选择“用 ...
- struct pollfd
struct pollfd 2010年04月15日 星期四 下午 03:59 int poll (struct pollfd *fds, size_t nfds , int timeout); str ...
- ETL开发
要进入开发阶段,了解不同的ETL产品. 整个ETL系统中,时间或更精确的,吞吐量是主要关心的内容.这种转换处理任务设计的主要目的归根结底是使得数据装载到展现表中最快并使得最终用户能快速的从这些表中得到 ...
- ZOJ3708:Density of Power Network
The vast power system is the most complicated man-made system and the greatest engineering innovatio ...
- 作业二:注册软件github
注册Github
- Sqlite 快速插入数据到本地表中
用原始Insert方法太慢,网上找到了https://www.cnblogs.com/yisen-code/p/6897524.html 思路是: 开启事务,开启预处理,然后把SQL用参数传入具体值来 ...
- SignalR支持的平台
服务器系统要求 SignalR服务器组件可以托管在各种服务器配置上.本节介绍受支持的操作系统版本,.NET框架,Internet Information Server和其他组件. 支持的服务器操作系统 ...
- window下使用MyCat实现简单的读写分离
参考文档 MyCat权威指南 MyCat项目主页 学会数据库读写分离.分表分库--用Mycat,这一篇就够了! MyCat安装 Java SDK下载(必须JDK7或更高版本) MYSQL下载 (MyC ...
- Net Manager测试连接测试没有成功,用户权限问题,以管理员身份运行后测试成功
Net Manager测试连接测试没有成功,截图如下:
- 设置视口中心点setViewCenter
ads_point pt; ads_name ent,ss; //切换到模型空间 acedMspace(); if (RTNORM != acedGetPoint(NULL,_T("\n选择 ...