JAVA基础-四种引用类型|强软弱虚

一、 强引用(StrongReference)

强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。

    Object strongReference = new Object();

只有把它设置为NULL的时候,垃圾回收机制才会进行回收。

二、 软引用(SoftReference)

如果一个对象具有软引用,如果内存充足,软引用对象不会被回收。那么当内存不足的时候,就会回收软引用对象。如果软引用回收了之后,仍然没有足够的内存空间,那么就抛出异常。

设置堆最大为20M
在这里插入图片描述

package DEMO;

import java.lang.ref.SoftReference;

public class SoftReferenceDemo {
    public static void main(String[] args) {
        SoftReference<byte []> m=new SoftReference<>(new byte[1024*1024*10]);//10M,内存中开辟了一个10M的空间
        //m=null
        System.out.println(m.get());
        //进行垃圾回收
        System.gc();

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(m.get());
        //加入顶的大小是20M,已经设置了一个m为10M的空间,现在新增一个B为12M的空间,堆内超量了。
        //如果是软引用,会自动回收m对象。
        byte [] b=new byte[1024*1024*12];
        System.out.println(m.get());
    }
}

注意,软引用,如果新增的B的大小即使回收了M还是超出范围的话,就会报错,因此B的大小得设置的不太大。

三、 弱引用(WeakReference)

弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

package DEMO;

import java.lang.ref.WeakReference;

public class WeakReferenceDemo {
    public static void main(String[] args) {
        WeakReference<byte []> m=new WeakReference<>(new byte[1024*1024*10]);//10M,内存中开辟了一个10M的空间
        System.out.println(m.get());
        System.gc();
        System.out.println(m.get());
    }
}

弱引用一遇到GC就被干死了,无论内存多少。

四、 虚引用(PhantomReference)

虚引用顾名思义,就是形同虚设。与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值