android必备知识(一)java引用类型

android必备知识回忆——java引用类型

java的引用类型
第一种:强引用,这种是最常见的,形式是“=”连接,例如 String str=“abc”,User user=new User(),;其中user存在栈里面,new User存在堆里面;

第二种:软引用,用SoftReference引用的对象称为软引用,形式是:SoftReference sfr=new SoftReference(str),其中str是在强引用中已经定义好的字符串类型,他们指向的内容都是存在堆中的“abc”

第三种:弱引用,WeakReference引用的对象称为弱引用,形式是WeakReference wrf=new WeakReference(str)

第四种:虚引用,形式是PhantomReference,它的作用主要是检测引用对象有没有被虚拟机回收掉。

这里就牵扯到一个概念:对象的可及性——一个对象可能被多个变量引用起来,那么由他的最强引用类型来决定他的对象的可及性,例如以上的“abc”,它有一个强引用(str),所以它是强可及。对象的可及性又牵扯到GC:
* 强可及对象,永远不会被GC回收掉

*软可及对象,当系统内存不足时,会被GC回收,若str=null,则表示将“abc”的强引用拿掉,此时“abc”只剩下软引用和弱引用,所以他就变成了若可及对象,此时可以通过软引用String strsfr=sfr.get()拿到“abc”,也可以通过弱引用String strwrf=wfr.get()拿到“abc”

*弱可及对象,当GC发现这个对象,就被回收;通过sfr.clear()清楚软引用的引用链。此时只能String strwrf=wfr.get()拿到“abc”,除非运气特别差,直接被GC发现这个弱引用,那样就会直接被回收;此时若执行一次GC,System.gc(),理论上讲,再通过弱引用应该拿不到“abc”,可事实是,通过弱应用仍然能拿到“abc”,为什么呢?因为“abc”是String str=“abc”,这代表什么?代表“abc”是在常量池中,而System.gc()回收的是堆内存;但是如果换一种定义方式——String str=new String(“abc”),这两种是完全同的定义方式,后者:1.首先在jvm堆内存中创建了一个String对象(一般new的对象都是在堆内存中)2.在常量池中创建了“abc”对象,str默认引用的是堆里面的;此时再通过System.gc()回收,发现拿到的是null了。

java的软、弱引用类型常见于android的各种框架中,比如处理图片、视频等内容,由于移动手机的内存有限,必须及时处理垃圾内容,又比如虚引用常用于检测对象有没有被GC回收就必须用到以上内容。
Android必备知识栏目还在继续,博主之前由于没有及时准备面试,错过了一家很好的公司,所以不想再让这种情况再次发生,毕竟现在找一份合适的工作真的难如上青天,所以按下决心每一次面试都要充足的准备,也希望准备的内容能帮到更多的人,毕竟生来皆苦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值