引用级别
引用级别
意义:用来标记对角是否可以被回收
级别:
强 > 软 > 弱 > 虚
1.强引用
即一般普通的引用。
如果一个对象是强引用,绝对不会被回收,即使内存空间不足也不会被回收,而是抛 OutOfMemoryError 异常使程序终止。
1 | String str = "abc"; |
在list集合里的数据不会释放,即使内存不足也不会
1 | Object obj = new Object(); |
//可直接通过obj取得对应的对象 如obj.equels(new Object());
而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这是经常用到的编码形式。
2.软引用
非必须引用,如果空间不足就会被GC回收。换句话说,在内存溢出之前进行回收。
只要没有被回收,该对象就可能被程序使用。软引用可用来实现内存敏感的高速缓存。
软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,JAVA虚拟机就会把这个软引用加入到与之关联的引用队列中。
1 | public void testSofeReference() { |
这时候 softReference 是对obj的一个软引用,通过sf.get()方法可以取到这个对象,当然,当这个对象被标记为需要回收的对象时,则返回null;
软引用主要用户实现类似缓存的功能,在内存足够的情况下直接通过软引用取值,无需从繁忙的真实来源查询数据,提升速度;当内存不足时,自动删除这部分缓存数据,从真正的来源查询这些数据。
3.弱引用
第二次圾垃回收时,被回收
4.虚引用
垃圾回收时回收,无法通过引用取到对象值
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 人话翻译机!
评论