Java提供了 java.lang.ref包,该包下的类均与垃圾回收机制相关

先介绍Java对象的集中引用类型

1.强引用

强引用是最常见的,创建对象就是强引用,如 String a = new String("1");

无论系统内存是否紧张,只要该对象还存在强引用就不会被垃圾回收机制回收

2.软引用

当系统内存足够时,不会被回收,当系统内存不足时,会将其回收

3.弱引用

当垃圾回收机制运行时,总会将其回收

4.虚引用

跟踪对象被垃圾回收的状态

通过检查与虚引用关联的引用队列中是否已经包含指定的虚引用,从而了解虚引用所引用的对象是否即将被回收

再介绍引用相关的类

  1. SoftReference<T>: 软引用类型,示例如下,

// 创建软引用类型

SoftReference<String> sr = new SoftReference<String>(new String("Hello"));

// 返回对象引用

String string = sr.get();

if(string == null){

// 因为软引用当系统内存紧张时会被回收,所以使用的时候需要判断是否为null

}

// 创建数组

SoftReference<String>[] srs = new SoftReference[100];

2.WeakReference<T>: 弱引用类型,示例如下

// 创建弱引用类型, 不能使用"Hello",这样系统会缓存这个字符串直接量,使用强引用来引用它

WeakReference<String> wr = new WeakReference<>( new String("Hello"));

// 调用弱引用

String str = wr.get();

// 因为软引用当运行垃圾回收时会被回收,所以使用的时候需要判断是否为null

if(str == null){}

// 强制垃圾回收

System.gc();

// 再次调用弱应用,发现已经为null

System.out.println(wr.get());

3.WeakHashMap<K,V>: 弱引用类型的Map,这个类是 java.util 包下的

当垃圾回收机制运行时,会清空所有key-value对,除非某些key还有强引用在引用它

4.PhantomReference<T>: 虚引用类型,类似于没有引用,要和引用队列联合使用

感觉不怎么用的到,就不举例子了,感兴趣自己查一下

5.ReferenceQueue<T>: 引用队列,用于保存被回收后对象的引用

最新文章

  1. Atitit.cto 与技术总监的区别
  2. 基于python的七种经典排序算法
  3. thinkphp 验证
  4. Java中RSA非对称密钥加解密使用示例
  5. Oracle 客户端配置
  6. 【Android开发学习笔记】【第九课】重力感应
  7. 第六篇 Integration Services:初级工作流管理
  8. 【Search for a Range】cpp
  9. HDOJ/HDU 2565 放大的X(分段思考~)
  10. java 面对对象(抽象 继承 接口 多态)
  11. Enum的简单了解
  12. CoreJavaE10V1P3.8 第3章 Java的基本编程结构-3.8 控制流程(Control Flow)
  13. 观光公交noip&lt;贪心&gt;
  14. Android调用第三方so
  15. Redux源码分析之applyMiddleware
  16. Oracle通过JOB定时执行存储过程实现两表数据比对
  17. Tomcat时区设置方法[转]
  18. Spring知识点回顾(08)spring aware
  19. Django REST framework+Vue 打造生鲜超市(五)
  20. golang 读书笔记

热门文章

  1. Tmux会话的使用
  2. 通过脚本下载GO被墙或常用的相关包
  3. 【渗透技术】渗透测试技术分析_TomCat
  4. Python面向对象3:面向对象的三大特性
  5. Spring Boot Redis Cluster 实战干货
  6. Vue 中是如何解析 template 字符串为 VNode 的?
  7. 在 .NET Core 下的 Swagger UI 自定义操作
  8. vue 项目实战 (入门)
  9. Mybatis 源码简述
  10. springboot rabbitmq整合