JVM的引用之四大引用介绍

本文详细介绍了Java的四种引用类型:强引用、软引用、弱引用和虚引用。通过示例代码展示了它们在内存管理和垃圾回收中的行为。强引用是最常见的引用类型,不会被垃圾收集器回收。软引用在内存不足时会被回收,而弱引用则在下次垃圾回收时即被清理。虚引用主要用于跟踪对象,并在回收时发送通知。
摘要由CSDN通过智能技术生成

java四大引用

  • 强引用(StrongReference):程序代码中普遍存在的赋值,如Object obj = new Object();无论任何情况下,只要强引用还存在,垃圾收集器就永远不会回收掉被引用对象
  • 软引用(SoftReference):定义SoftReference softReference = new SoftReference(所要引用的对象),该软引用是在java.lang.ref下的,如果要成功回收软引用,必须要进行第二次回收,就是内存要满的时候就会回收软引用
package EveryGCTest;
//参数:-XX:+UseParallelGC -XX:+PrintGCDetails -Xmx5m -Xms5m这里要依据你自己的回收内存而定,你自己设置让堆接近满的状态,让他自己回收
import java.lang.ref.*;
/**
 * @author wang
 * @create 2022-2022-30-18:32
 */
public class softReferenceTest {
    static class User{
        private int age;
        public User(int age){
            this.age = age;
        }
        @Override
        public String toString(){
            return this.age+"";
        }
    }
    public static void main(String[] args) {
        SoftReference softReference = new SoftReference(new User(1));
        System.out.println("first:"+softReference.get());


        System.gc();
//        System.gc();
        try {
            byte [] bytes = new byte[4096*1024-1681*1024+1024*571];
        }catch(RuntimeException e) {
            e.printStackTrace();
        }finally{
//            System.gc();
            System.out.println("seconde:" + softReference.get());
//            System.out.println("third:" + softReference.get());
        }
    }
}

如果你主动调用两个System.gc()也是没有办法消除软引用的。

  • 弱引用:WeakReference,被弱引用关联的对象只能活到下一次垃圾回收之前,当进行垃圾回收的时候,无论内存是否足够,弱引用都会被回收。
  • 虚引用:是否存在不构成影响,也无法通过该虚引用来获取一个实例,虚引用的作用就是跟踪对象,然后再对象被回收的时候向系统发送一个消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值