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

Java常见面试题含答案之强弱软虚引用(第五期)

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

Java常见面试题含答案之强弱软虚引用(第五期)

14、 Java的四种引用——强弱软虚。

  • 强引用
    在强引用下,即使发生了OOM,也不会被回收器材回收。
String string = new String("123");
System.out.println(string);
  • 软引用
    软引用在程序内存不足时,会被回收。

SoftReference源码

public class SoftReference extends Reference {

    
    private static long clock;

    
    private long timestamp;

    
    public SoftReference(T referent) {
        super(referent);
        this.timestamp = clock;
    }

    
    public SoftReference(T referent, ReferenceQueue q) {
        super(referent, q);
        this.timestamp = clock;
    }

    
    public T get() {
        T o = super.get();
        if (o != null && this.timestamp != clock)
            this.timestamp = clock;
        return o;
    }

}

使用方式

SoftReference wrf = new SoftReference(new String("str"));

在这里,wrf也属于是一个强引用,而里面的new String相当于是一个弱引用,相当于源码中的T。

应用场景:创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。

  • 弱引用
    弱引用就是只要JVM垃圾回收器发现了它,就会将之回收。
 WeakReference wrf = new WeakReference(str);

应用场景:Java源码中的 java.util.WeakHashMap 中的 key 就是使用弱引用,我的理解就是,一旦我不需要某个引用,JVM会自动帮我处理它,这样我就不需要做其它操作。

  • 虚引用
    虚引用的回收机制跟弱引用差不多,但是它被回收之前,会被放入 ReferenceQueue 中。注意
    哦,其它引用是被JVM回收后才被传入 ReferenceQueue 中的。由于这个机制,所以虚引用大多
    被用于引用销毁前的处理工作。还有就是,虚引用创建的时候,必须带有 ReferenceQueue。
PhantomReference prf = new PhantomReference(new String("str"),
new ReferenceQueue<>());

应用场景:对象销毁前的一些操作,比如说资源释放等。 Object.finalize() 虽然也可以做这
类动作,但是这个方式即不安全又低效

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/315261.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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