Java弱引用理解纠正!

背景

  1. 之前学习弱引用时误入了歧途,老是以为弱引用的对象在GC时就一定会被回收,其实不正确的!

纠正!

  1. 弱引用的对象只有在没有对象引用的情况下,GC,才会被回收!
  2. 例如:
A a = new A();
B b = new B(a);
  • 此时如果a = null;,那么a不会被回收,因为被B强引用;
  • 如果改成:
A a = new A();
WeakReference<A> weak = new WeakReference<>(a);
  • a = null;,a会被回收。

联系Android

  1. 非静态内部类导致的内存泄漏,基本都是因为内部类过长时间隐性强引用持有Activity对象,导致页面销毁时无法及时释放。因此往往会改成静态内部类,去掉隐性持有的Activity对象,并把Activity对象使用弱引用维护。
  2. 之前就会有个疑问:GC无法控制,那么正在使用Activity,此时内部类弱引用的Activity对象被回收,那不就各种异常了吗?
  3. 纠正之后才知道,内部类引用的Activity对象在Activity销毁时才没有对象引用,才会被回收
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值