JVM学习笔记---强引用,软引用,弱引用,虚引用

强引用

  • 最普遍的引用:Object obj = new Object();
  • 抛出OutOfMemoryError终止程序也不会回收具有强引用的对象
  • 通过将对象设置为null来弱化引用,使其被回收

软引用 (Soft Reference)

  • 对象处在有用但是非必须的状态
  • 只有当内存空间不足时,GC才会回收该引用的对象内存空间
  • 可以用来实现高速缓存
  • 软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,JAVA虚拟机就会把这个软引用加入到与之关联的引用队列中
Integer i = new Integer(100);
SoftReference soft = new SoftReference(i);

弱引用 (Weak Reference)

  •  非必须的对象,比软引用更弱一些
  • GC时会被回收,不管当前内存空间足够与否
  • 被回收的概率也不大,因为GC线程的优先级比较低
  • 适用于引用偶尔被使用且不影响垃圾收集的对象
  • 弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中
Integer i = new Integer(100);
WeakReference soft = new WeakReference(i);

虚引用 (Phantom Reference) 

  • 不会决定对象的生命周期
  • 任何时候都可能被垃圾收集器回收
  • 跟踪对象被垃圾收集器回收的活动,起哨兵作用
  • 必须和引用队列ReferenceQueue联合使用
Integer i = new Integer(100);
ReferenceQueue queue = new ReferenceQueue();
PhantomReference ref = new PhantomReference(i, queue);

总结: 

JVM学习笔记---强引用,软引用,弱引用,虚引用_第1张图片 

 

你可能感兴趣的:(java虚拟机)