java中的四种引用

java中的四种引用
参考: https://blog.csdn.net/qq_14989227/article/details/79589342
https://blog.csdn.net/u014086926/article/details/52106589
https://www.cnblogs.com/huajiezh/p/5835618.html
https://blog.csdn.net/qq_39192827/article/details/85611873

java对象的引用包括: 强引用,软引用,弱引用,虚引用

  1. 什么是引用?
    java中的数据类型分为,基本数据类型和引用数据类型
    ①基本数据类型(8种): byte、short、int、long、float、double,char,boolean
    基本数据类型默认值,即位数 https://blog.csdn.net/qq_43788878/article/details/104060123
    不过基本数据类型在作为属性的时候才有用,作为局部变量时,必须初始化才能用
    ②引用数据类型: 类、接口类型、数组类型、枚举类型、注解类型,字符串型
    社么叫引用变量?
    例如: A a =new A(); a是A对象 a中存放的是A对象的地址(即引用,不是对象,对象放在堆里(通常情况下))
    关于值传递和引用传递参考: https://blog.csdn.net/xiaojinlai123/article/details/88678367

  2. 什么是强引用?
    是指创建一个对象并把这个对象赋给一个引用变量。
    Object object =new Object();
    强引用有引用变量指向时永远不会被垃圾回收,JVM宁愿抛出OutOfMemory错误也不会回收这种对象。
    怎么理解呢 只要object(或者还有变量) 还指向这个被new出来的对象,这个对象就不会被回收
    怎么断开这个引用,将变量指向null就行了

例如HashMap中clear()函数,就是将所有节点全部指向null (没有变量指向这个对象了,这个对象就会被回收)
 public void clear() {
    Node<K,V>[] tab;
    modCount++;
    if ((tab = table) != null && size > 0) {
        size = 0;
        for (int i = 0; i < tab.length; ++i)
            tab[i] = null;
    }
}
  1. 什么是软引用?(一般不会被回收,除非内存空间不足)
    如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它;
    如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。
    在Java中用java.lang.ref.SoftReference类来表示
    一个软引用的例子
    public static void main(String[] args) {
    String str = “123456789”;
    SoftReference sr = new SoftReference(str);
    System.out.println(sr.get()); // 123456789
    str = null;
    System.out.println(str); //null
    System.out.println(sr.get()); //123456789
    String s = sr.get();
    s = null;
    System.out.println(sr.get()); //123456789
    }

  2. 什么是弱引用?(只要gc就会被回收)
    弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,
    都会回收被弱引用关联的对象。在java中,用java.lang.ref.WeakReference类来表示。
    弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。
    在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,
    不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,
    因此不一定会很快发现那些只具有弱引用的对象。所以被软引用关联的对象只有在内存不足时才会被回收,
    而被弱引用关联的对象在JVM进行垃圾回收时总会被回收。
    一个弱引用的例子
    public static void main(String[] args) {
    WeakReference sr = new WeakReference(new String(“hello”));
    System.out.println(sr.get());
    System.gc(); //通知JVM的gc进行垃圾回收
    System.out.println(sr.get()); //null
    }

  3. 什么是虚引用?
    虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期。
    在java中用java.lang.ref.PhantomReference类表示。如果一个对象与虚引用关联,
    则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。
    虚引用主要用来跟踪对象被垃圾回收的活动。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值