栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java中的四种引用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java中的四种引用

java中的四种引用

强引用>软引用>弱引用>虚引用

1、强引用

比如:

Object object = new Object();

就是强引用,垃圾回收的时候不会被回收掉,在内存不足的时候也不会被回收掉,会抛出OOM(Out of Memory)异常。

2、软引用

比如:

Object object = new Object()
SoftReference sf = new SoftReference<>(object);
 

在内存不足的时候发生垃圾回收就会被回收掉,然后软引用就会被放入引用队列里面,用来把占用的其他资源释放掉。

应用于缓存。(代码来源:https://blog.csdn.net/qq87034246/article/details/80710254 注释里面添加了自己的理解)

public class Cache   {

    private Map SoftCache;//用于cache内容的存储
    private ReferenceQueue queue;//reference的队列

    
    private class ObjectRef extends SoftReference{
        
        Object key;
        public ObjectRef(Object key,Object value,ReferenceQueue queue) {
            super(value,queue);
            key = key;
        }
    }

	
    public Cache(){
        SoftCache = new HashMap<>();
        queue = new ReferenceQueue<>();
    }

    
    public void set(Object key , Object value) {
        //先清除已经被GC的软引用
        cleanCache();
        ObjectRef ref = new ObjectRef(key, value, queue);
        SoftCache.put(key, ref);
    }

    
    public Object get(Object value) {
        ObjectRef ref = SoftCache.get(value);
        if (ref == null) {
            return null;
        }
        return ref.get();
    }

    
    private void cleanCache() {
        ObjectRef ref = null;
        while((ref= (ObjectRef) queue.poll())!=null){
            SoftCache.remove(ref.key);
        }
    }

    
    public void clear() {
        cleanCache();
        SoftCache.clear();
    }
}

 
3、弱引用 

无论内存是否足够,发生了垃圾回收就会被回收掉。

Object object = new Object()
WeakReference sf = new WeakReference<>(object);
 
4、虚引用 

虚引用必须和队列一起使用,虚引用不能获得引用的对象,随时会被回收。

总结
  • 引用队列的作用
    队列就是为了在当前弱引用或者虚引用,引用的对象被销毁以后就会把弱引用或者虚引用放到引用队列里面,引用队列用来释放虚引用或者弱引用分别引用的对象关联的外部资源,垃圾回收释放的是对象时java内部资源,引用队列用来按顺序释放外部资源
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号