1、四种类型引用-概述

  1. 1java对象的引用包括:
  2. 1-1、从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。

1.1、四种类型引用-强引用

  1. 1、四种类型引用-强引用(strong reference)-概述
  2. 1-1、如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。
  3. 1-2、指创建一个对象并把这个对象赋给一个引用变量。【new()一个对象】
  4. 2、四种类型引用-强引用(strong reference)-举例Demo
  5. public class Demo{
  6. public static void main(String[]args){
  7. Object obj=new Object();//强引用,默认
  8. Object ref=obj;//引用传递
  9. obj=null;//断开连接
  10. System.gc();
  11. System.out.println(ref);
  12. }
  13. }

1.2、四种类型引用-软引用

  1. 1、四种类型引用-软引用(SoftReference)-概述
  2. 1-1、如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。
  3. 1-2、软引用可用来实现内存敏感的高速缓存,比如网页缓存、图片缓存等。使用软引用能防止内存泄露,增强程序的健壮性。
  4. 1-3、一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对 这个Java对象回收前,SoftReference类所提供的get()方法返回Java对象的强引用。另外,一旦垃圾线程回收该Java对象之 后,get()方法将返回null
  5. 1-4public class SoftReference<T> extends Reference<T> {}
  6. 2、四种类型引用-强引用(SoftReference)-举例Demo
  7. public class Demo{
  8. public static void main(String[]args){
  9. Object obj=new Object();
  10. SoftReference<Object> ref=new SoftReference<Object><obj>;//软引用
  11. obj=null;//断开连接
  12. System.gc();
  13. System.out.println(ref.get());
  14. }
  15. }

1.3、四种类型引用-弱引用

  1. 1、四种类型引用-弱引用(WeakReference)-概述
  2. 1-1、无论内存够不够,下一次内存收集之前都会进行;
  3. 1-2、弱引用需要使用的是Map接口的子类:java.util.WeakHashMapkey是弱引用】。
  4. 1-3、在java中,用java.lang.ref.WeakReference类来表示。
  5. 1-3-1public class WeakReference<T> extends Reference<T> {}
  6. 2、四种类型引用-弱引用(PhantomReference)-举例Demo
  7. public class TestDemo{
  8. public static void main(String[]args){
  9. String key=new String(“hi”);
  10. String value=new String(“hello”);
  11. Map<String,String> map=new WeakHashMap<String,String>();
  12. map.put(key,value);
  13. System.out.println(map.get(key));
  14. key=null;
  15. System.out.println(map);
  16. System.gc();
  17. System.out.println(map);
  18. }
  19. }
  20. public class TestDemo{
  21. public static void main(String[]args){
  22. String key=new String(“hi”);
  23. WeakReference<String> map=new WeakHashMap<String>(key);
  24. Key=null;
  25. System.out.println(ref.get());
  26. System.gc();
  27. System.out.println(ref.get());
  28. }
  29. }

1.4、四种类型引用-虚引用

  1. 1、四种类型引用-虚引用(PhantomReference)-概述
  2. 1-1、虚引用,它并不影响对象的生命周期。
  3. 1-2、在java中用java.lang.ref.PhantomReference类表示。
  4. 1-3、如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。
  5. 1-4、虚引用必须和引用队列(ReferenceQueue)关联使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之 关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。
  6. 1-5public class WeakReference<T> extends Reference<T> {}
  7. 2、四种类型引用-虚引用(PhantomReference)-举例Demo
  8. public class Demo {
  9. public static void main(String[] args) {
  10. //引用队列
  11. ReferenceQueue<String> queue = new ReferenceQueue<String>();
  12. PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);
  13. System.out.println(pr.get());
  14. }
  15. }

2、四种类型引用-简介

2.1、四种类型引用-类继承关系

image.png

2.2、FinalReference详解

https://blog.csdn.net/zqz_zqz/article/details/79225245