GCJava中引用

编程

1.1 强引用(Strong Reference)

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

1.2 软引用(Soft Reference)

  • 对象处在有用但非必须的状态
  • 只有当内存空间不足时,GC会回收该引用的的对象内存
  • 可以用来实现高速缓存

代码:
String str = new String("abc");
SoftReference<String> softRef = new SoftReference<String>(str);

1.3 弱引用(Weak Reference)

  • 非必须的对象,比软引用更弱一些
  • GC时会被回收
  • 被回收的概率也不大,因为GC优先级比较低
  • 适用于引用偶尔被使用且不影响垃圾收集的对象

代码:
String str = new String("abc");
WeakReference<String> weakRef = new WeakReference<String>(str);

1.4 虚引用(Phantom Reference)

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

代码:
String str = new String("abc");
ReferenceQueue queue = new ReferenceQueue();
PhantomReference ref = new PhantomReference(str, queue); 

2 引用队列(ReferenceQueue)

  • 无实际存储结构,存储逻辑依赖于内部节点之间的关系来表达
  • 存储关联的且被GC的软引用,弱引用以及虚引用

3 总结

 

被垃圾回收时间

用途

生存时间

强引用

从来不会

对象的一般状态

JVM停止运行时终止

软引用

在内存不足时

对象缓存

内存不足时终止

弱引用

在垃圾回收时

对象缓存

gc运行后终止

虚引用

Unknown

标记、哨兵

Unknown

四种引用类结构图

以上是 GCJava中引用 的全部内容, 来源链接: utcz.com/z/513839.html

回到顶部