美文网首页
Java中有那几种引用

Java中有那几种引用

作者: erki_stwee | 来源:发表于2018-09-21 17:09 被阅读17次

https://blog.csdn.net/cselmu9/article/details/51366946

Java中有哪几种引用?它们的含义和区别是什么?

请用Java实现一个线程安全且高效的单例模式。

Java中有哪几种引用?它们的含义和区别是什么?

  • 强引用(Strong Reference),就是我们最常见的普通对象引用。只要还有强引用指向一个对象,就表明对象还“活着”,垃圾收集器就不会碰这种对象。对于一个普通对象,如果没有其他的引用关系,只要超过了引用的作用域或者显示地将相应引用赋值为Null,就可以被垃圾收集了,当然具体回收时机还是要看垃圾收集策略。

  • 软引用(SoftReference),是一种相对于强引用弱化一些的引用,就可以让对象豁免一些垃圾收集,只有当JVM认为内存不足时,才会去试图回收软引用指向的对象。JVM会确保在抛出OutOfMemoryError之前,清理软引用指向的对象。软引用通常用来实现内存敏感的缓存。如果还有空闲内存,就可以暂时保留缓存,当内存不足时清理掉,这样就保证了使用缓存的同时,不会耗尽内存。

  • 弱引用(WeakReference)并不能使对象豁免垃圾收集,仅仅是提供了一种访问在弱引用状态下对象的途径。这样就可以用来构建一种没有特定约束的关系。如果试图获取的对象还在,就使用它,否则重现实例化。它同样是很多缓存实现的选择。

  • 幻象引用也称之为虚引用,你不能通过它访问对象。虚引用仅仅是一种确保对象被finalize以后,做某些事情的机制,比如,通常用来做所谓的Post-Morterm清理机制。

请用Java实现一个线程安全且高效的单例模式

造成不安全的原因

  • 反射(强行调用私有构造器)
  • 序列化和反序列化
    1)静态内置类实现单例模式
public class MySingleTon {

    public static MySingleTon getInstance() {
        return MySingleHolder.instance;
    }

    private MySingleTon() {
    }

    private static class MySingleHolder {
        private static MySingleTon instance = new MySingleTon();
    }

}

2)双重校验

public class MySingleTon implements Serializable {

    private static final long serialVersionUID = 1L;
    private static volatile MySingleTon instance;

    public static MySingleTon getInstance() {
        if (instance == null) {
            synchronized (MySingleTon.class) {
                if (instance == null) {
                    instance = new MySingleTon();
                }
            }
        }
        return instance;
    }

    private MySingleTon() {
    }

    //反序列化的时候调用
    protected Object readResolve() throws ObjectStreamException {
        return instance;
    }

}

相关文章

  • Java中有那几种引用

    https://blog.csdn.net/cselmu9/article/details/51366946 Ja...

  • 第八周 Java基础知识学习(引用,单例)

    话题:Java基础知识学习 1、Java中有哪几种引用?它们的含义和区别是什么? 强引用 只要某个对象有强引用与之...

  • Java基础知识学习

    1、Java中有哪几种引用?它们的含义和区别是什么? Java中存在四种引用,它们分别是: 1. 强引用(Stro...

  • Java中的引用和区别

    一、java中有哪几种引用,他们的含义和区别是什么? 含义 强引用(StrongReference) 是使用最普遍...

  • Java中的4种引用类型

    1、Java中有哪几种引用?它们的含义和区别是什么? 从JDK1.2开始,Java中的引用类型分为四种,分别是:①...

  • 第八周 Java 基础

    话题:Java 基础知识学习 1、Java 中有哪几种引用?它们的含义和区别是什么?2、请用 Java 实现一个线...

  • 第八周

    话题:Java基础知识学习 1、Java中有哪几种引用?它们的含义和区别是什么?2、请用Java实现一个线程安全且...

  • Java基础知识学习(Java中有哪几种引用 & 最佳单

    1、Java中有哪几种引用?它们的含义和区别是什么? 2、请用Java实现一个线程安全且高效的单例模式。(1)利用...

  • Reference引用源码解析

    一、JAVA引用 JAVA中有四种引用,强引用、软引用、弱引用、虚引用,而这些引用在代码层次都继承了Referen...

  • Java中的四种引用类型

    Java中有四种引用类型:StrongReference(强引用),SoftReference(软引用),Weak...

网友评论

      本文标题:Java中有那几种引用

      本文链接:https://www.haomeiwen.com/subject/ghfznftx.html