Java 四种引用
来源:互联网 发布:淘宝发布宝贝 3c认证 编辑:程序博客网 时间:2024/06/05 03:55
Java 四种引用
强引用:
只要引用存在,垃圾回收机制即使抛出OutOfMemor也不会进行回收
Object obj = new Object();
软引用:
当内存不足的时候,可以回收
看代码:
/** * 版权所有 (c) 2016,小明有限公司 */package helloTest;import java.lang.ref.ReferenceQueue;import java.lang.ref.SoftReference;/** * 类说明: * * <pre> * Modify Information: * Author Date Description * ============ =========== ============================ * wangxiaoming 2016-7-12 Create this file * </pre> * */public class TestJava4Reference { public static void main(String[] args) { // TODO Auto-generated method stub try { soft(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void soft() throws Exception { /*代表软引用的类:java.lang.ref.SoftReference 代表弱引用的类:java.lang.ref.WeakReference 代表虚引用的类:java.lang.ref.PhantomReference 他们同时继承了:java.lang.ref.Reference*/ //软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。 /* ReferenceQueue refQueue = new ReferenceQueue(); SoftReference softRef = new SoftReference(obj, refQueue); */ Object obj = new Object(); SoftReference<Object> softRef = new SoftReference<Object>(obj); System.out.println(softRef.get()); //有时候会返回Null // java.lang.Object@f9f9d8 System.out.println(refQueue.poll()); // null // 清除强引用,触发GC obj = null; //System.gc(); System.out.println(softRef.get()); //Thread.sleep(200); //System.out.println(refQueue.poll()); }}
弱引用:
/** * 版权所有 (c) 2016,小明有限公司 */package helloTest;import java.lang.ref.ReferenceQueue;import java.lang.ref.SoftReference;import java.lang.ref.WeakReference;import java.util.WeakHashMap;/** * 类说明: * * <pre> * Modify Information: * Author Date Description * ============ =========== ============================ * wangxiaoming 2016-7-12 Create this file * </pre> * */public class TestJava4Reference { public static void main(String[] args) { // TODO Auto-generated method stub try { soft(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void soft() throws Exception { /*代表软引用的类:java.lang.ref.SoftReference 代表弱引用的类:java.lang.ref.WeakReference 代表虚引用的类:java.lang.ref.PhantomReference 他们同时继承了:java.lang.ref.Reference*/ //软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。 /* ReferenceQueue refQueue = new ReferenceQueue(); SoftReference softRef = new SoftReference(obj, refQueue); */ /* Object obj = new Object(); SoftReference<Object> softRef = new SoftReference<Object>(obj); System.out.println(softRef.get()); //有时候会返回Null // java.lang.Object@f9f9d8 System.out.println(refQueue.poll()); // null // 清除强引用,触发GC obj = null; //System.gc(); System.out.println(softRef.get()); */ //Thread.sleep(200); //System.out.println(refQueue.poll()); //弱引用 Object obj = new Object(); WeakReference<Object> weakReference = new WeakReference<Object>(obj); obj = null; System.gc(); System.out.println(weakReference.get());// 有时候会返回Null System.out.println(weakReference.isEnqueued());//判断是否有垃圾回收标记,表示即将回收的垃圾 }}
虚引用:
/** * 版权所有 (c) 2016,小明有限公司 */package helloTest;import java.lang.ref.PhantomReference;import java.lang.ref.ReferenceQueue;import java.lang.ref.SoftReference;import java.lang.ref.WeakReference;import java.util.WeakHashMap;/** * 类说明: * * <pre> * Modify Information: * Author Date Description * ============ =========== ============================ * wangxiaoming 2016-7-12 Create this file * </pre> * */public class TestJava4Reference { public static void main(String[] args) { // TODO Auto-generated method stub try { soft(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void soft() throws Exception { /*代表软引用的类:java.lang.ref.SoftReference 代表弱引用的类:java.lang.ref.WeakReference 代表虚引用的类:java.lang.ref.PhantomReference 他们同时继承了:java.lang.ref.Reference*/ //软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。 /* ReferenceQueue refQueue = new ReferenceQueue(); SoftReference softRef = new SoftReference(obj, refQueue); */ /* Object obj = new Object(); SoftReference<Object> softRef = new SoftReference<Object>(obj); System.out.println(softRef.get()); //有时候会返回Null // java.lang.Object@f9f9d8 System.out.println(refQueue.poll()); // null // 清除强引用,触发GC obj = null; //System.gc(); System.out.println(softRef.get()); */ //Thread.sleep(200); //System.out.println(refQueue.poll()); /* //弱引用 Object obj = new Object(); WeakReference<Object> weakReference = new WeakReference<Object>(obj); obj = null; System.gc(); System.out.println(weakReference.get());// 有时候会返回Null System.out.println(weakReference.isEnqueued());//判断是否有垃圾回收标记,表示即将回收的垃圾*/ // 虚引用 Object obj = new Object(); ReferenceQueue refQueue = new ReferenceQueue(); PhantomReference<Object> phantomReference = new PhantomReference<Object>(obj, refQueue); System.out.println(phantomReference.get()); // 永远返回Null System.out.println(phantomReference.isEnqueued()); //返回时否从队列中删除 }}
0 0
- Java四种引用
- Java 四种引用
- java四种引用
- Java四种引用
- Java四种引用
- Java 四种引用
- java四种引用
- java四种引用
- java四种引用
- java 四种引用
- Java四种引用
- java四种引用
- java四种引用对象
- Java的四种引用
- Java四种引用类型
- Java中的四种引用
- Java四种对象引用
- Java的四种引用
- 对java多线程的线程安全性的一些总结
- 基于注解的SpringMVC+Spring JDBC template+JSTL-demo练习
- 根据头部信息http header控制nginx选择反向代理服务器
- 一键杀死最近打开APP
- 学习 Crontab
- Java 四种引用
- 474. Ones and Zeroes
- 对java内存回收机制的一些总结
- Matrix QR Decomposition using OpenCV
- Visual Studio 2013 添加一般应用程序(.ashx)文件到SharePoint项目
- Masonry学习第一篇(Basic)
- sqlserver高并发情况下 select 和update操作造成死锁的解决方法
- android日期选择控件
- nginx依据http请求头中的accept-language转发到不同的页面