面试官:如何理解JVM中的强引用、软引用、弱引用、虚引用?

本文介绍了Java中强引用、软引用、弱引用和虚引用的概念及其区别。强引用是默认引用类型,垃圾回收时不会回收强引用对象。软引用在内存充足时不回收,内存不足时会被回收,常用于缓存。弱引用对象在垃圾回收时总会被回收,而虚引用无法直接访问对象,主要用于跟踪对象被垃圾回收的状态,通常与引用队列结合使用。
摘要由CSDN通过智能技术生成

整体架构

面试官:如何理解JVM中的强引用、软引用、弱引用、虚引用?

强引用

强引用是默认支持,当内存不足的时候,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会回收对象。

强引用是最常见的普通对象引用,只要还有强引用指向对象,对象就存活,垃圾回收器不会处理存活对象。一般把一个对象赋给一个引用变量,这个引用变量就是强引用。当一个对象被强引用变量所引用,它就处于可达状态,是不会被垃圾回收的,即使之后都不会再用到了,也不会回收。因此强引用是造成Java内存泄漏的主要原因之一。

对于一个普通对象,如果没有其他引用关系,只要超过了引用的作用域或者显式地将相应的强引用赋值为null,一般认为就是可以被垃圾回收了。(具体的回收时机看垃圾回收策略)

下例中,b就是强引用。

public static void main(String[] args) {
        Object a = new Object();
        Object b = a;
        a = null;
        System.out.println(b);//java.lang.Object@4554617c
    }

软引用

软引用是一种相对强引用弱化了一些的引用,用
java.lang.ref.SoftReference实现,可以让对象豁免一些垃圾收集。当系统内存充足的时候,不会被回收;当系统内存不足的时候,会被回收。

软引用一般用于对内存敏感的程序中,比如高速缓存。

import java.lang.ref.SoftReference;

public class SoftReferenceDemo {
    public static void main(String[] args) {
        Object a = new Object();
        SoftReference<Object> softReference = new SoftReference<>(a);//软引用
        //a和软引用指向同一个对象
        System.out.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值