服务器之家

服务器之家 > 正文

Java的四种引用方式

时间:2022-03-06 00:43     来源/作者:Android帅次

1.强引用(StrongReference)

  • 使用最普遍的引用。
  • 只要引用链没有断开,强引用就不会断开。- 当内存空间不足,抛出OutOfMemoryError终止程序也不会回收具有强引用的对象。
  • 通过将对象设置为null来弱化引用,使其被回收
?
1
2
3
Object object = new Object();
String str = "scc";
//都是强引用

2.软引用(SoftReference)

  • 对象处在有用但非必须的状态
  • 只有当内存空间不足时, GC会回收该引用的对象的内存。
  • 可以用来实现高速缓存(作用)--比如网页缓存、图片缓存
?
1
2
3
// 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的,
// 这里的软引用指的是指向new String("str")的引用,也就是SoftReference类中T
SoftReference<String> wrf = new SoftReference<String>(new String("str"));

3.弱引用(WeakReference)

弱引用就是只要JVM垃圾回收器发现了它,就会将之回收。

  • 非必须的对象,比软引用更弱一-些
  • GC时会被回
  • 被回收的概率也不大,因为GC线程优先级比较低
  • 适用于引用偶尔被使用且不影响垃圾收集的对象 使用:
?
1
2
Map<Key, ResourceWeakReference> activeEngineResources = new HashMap<>();
//ResourceWeakReference弱引用

4.虚引用(PhantomReference)

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

        当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之 关联的引用队列中。

        程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

?
1
2
3
4
5
Object obj = new Object();
ReferenceQueue queue = new ReferenceQueue();
PhantomReference reference = new PhantomReference(obj, queue);
//强引用对象滞空,保留软引用
obj = null;

5. 引用队列(ReferenceQueue)

  • 无实际存储结构,存储逻辑依赖于内部节点之间的关系来表达
  • 存储关联的且被GC的软引用,弱引用以及虚引用
Java的四种引用方式
到此这篇关于Java的四种引用方式的文章就介绍到这了,更多相关Java引用方式内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://juejin.cn/post/7023989364828930079
标签:

相关文章

热门资讯

2022年最旺的微信头像大全 微信头像2022年最新版图片
2022年最旺的微信头像大全 微信头像2022年最新版图片 2022-01-10
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整 2021-08-24
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
返回顶部