【面试题精讲】Java中的五种引用类型

!! 有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

首发博客地址[1]

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。[2]


1. 什么是引用类型?

引用类型是指在 Java 中,用于引用(指向)某个对象的类型。Java 中共有五种引用类型,包括强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)和自定义引用类型。

2. 为什么需要引用类型?

Java 中的对象都是通过引用指向的,而不是直接操作对象本身。引用类型的存在可以帮助我们更灵活地管理内存,解决对象的生命周期管理问题。不同类型的引用可以根据需求来决定对象是否活跃,是否可以被垃圾回收。

3. 引用类型的实现原理

3.1 强引用(Strong Reference)

  • 强引用是最常见的引用类型,使用最普遍的引用方式。通过 new操作符创建的对象默认就是强引用。
  • 强引用的对象在任何时间都不会被垃圾回收器回收,只有在没有任何强引用指向这个对象时,才会被回收。
  • 强引用的对象会一直保存在内存中,直到程序结束或者手动置空。
  • 强引用的使用场景:大部分的对象都是通过强引用来引用的,如普通的对象引用和静态变量引用。

3.2 软引用(Soft Reference)

  • 软引用是比弱引用强一点的引用类型。通过软引用创建的对象在内存足够的情况下不会被垃圾回收器回收,只有在内存不够时才会被回收。
  • 当内存空间不足时,垃圾回收器会回收软引用关联的对象,以释放内存,以保证系统的健壮性。
  • 软引用的使用场景:适合做缓存、图片加载等场景,可以在内存不足时释放一些非必要的对象,以避免内存溢出。

3.3 弱引用(Weak Reference)

  • 弱引用是比软引用更弱的引用类型。通过弱引用创建的对象在任何时候都可能被垃圾回收器回收。
  • 只要垃圾回收器发现了某个对象只有弱引用指向它,就会立即回收这个对象。弱引用被垃圾回收时,Java 虚拟机会自动把这个弱引用加入到与之关联的 ReferenceQueue 队列中。
  • 弱引用的使用场景:适合一些非关键的缓存场景,当需要立即释放对象内存时,可以使用弱引用。

3.4 虚引用(Phantom Reference)

  • 虚引用是 Java 中最弱的引用类型。通过虚引用创建的对象在任何时候都可能被垃圾回收器回收。
  • 虚引用的主要目的是在对象被垃圾回收器回收时收到一个系统通知,通过虚引用关联的 ReferenceQueue 来实现。
  • 虚引用本身并不能通过它访问到对象,因此虚引用必须和引用队列(ReferenceQueue)一起使用。
  • 虚引用的使用场景:主要用于管理直接内存映射的释放,如 NIO 中的 DirectByteBuffer。

3.5 自定义引用类型

除了上述四种常见的引用类型外,我们也可以根据自己的需求定义自己的引用类型。自定义引用类型可以根据实际情况来管理对象的生命周期,实现更加灵活的引用策略。

4. 引用类型的使用示例

下面以软引用为例,来展示引用类型的使用示例:

import java.lang.ref.SoftReference;

public class ReferenceExample {
    public static void main(String[] args) {
        String str = new String("Hello World");
        SoftReference<String> softReference = new SoftReference<>(str);
        str = null// 手动置空强引用
        System.out.println(softReference.get()); // 输出:Hello World
    }
}

5. 引用类型的优点

  • 可以帮助我们更灵活地管理内存,解决对象的生命周期管理问题。
  • 不同类型的引用可以根据需求来决定对象是否活跃,是否可以被垃圾回收。

6. 引用类型的缺点

  • 过度使用引用类型可能导致内存泄漏和性能问题,需要根据具体情况和需求来选择适当的引用类型。

7. 引用类型的使用注意事项

  • 需要根据具体场景选择合适的引用类型,避免内存泄漏和性能问题。
  • 当使用软引用、弱引用和虚引用时,需要结合 ReferenceQueue 来实现更灵活的引用策略。

8. 总结

引用类型是 Java 中用于引用对象的类型,包括强引用、软引用、弱引用、虚引用和自定义引用类型。每种引用类型在对象被垃圾回收的时机和方式上略有区别,可以根据需求选择合适的引用类型来管理对象的生命周期。引用类型可以帮助我们更灵活地管理内存,但过度使用可能导致内存泄漏和性能问题,需谨慎使用。


写在最后

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。[3]

学习建议

这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。

重点内容说三遍

不要死记硬背,每天复习,有个相关概念就行

不要死记硬背,每天复习,有个相关概念就行

不要死记硬背,每天复习,有个相关概念就行

关于价格

现在是限时优惠,随着参与人数的增加,价格会不断调整。

关注公众号并加我微信,备注 兑换码,就可以半价购买。

关于更新

文章会持续更新。每个月至少更新 100 篇 ✍️(˶ˆ꒳ˆ˵),于 2023 年 9 月 26 日正式发布。

关于我

欢迎关注我的博客 https://blog.zysicyj.top

如果你想加入交流群讨论技术,请加我微信,备注【交流群】,微信号是【sheng_chenyuanjie】。

不想付费?

你也可以关注我的微信公众号或者博客,所有的面试题都可以免费看到。

参考资料

[1]

首发博客地址: https://blog.zysicyj.top/

[2]

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。: https://store.amazingmemo.com/chapterDetail/1685324709017001

[3]

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。: https://store.amazingmemo.com/chapterDetail/1685324709017001

本文由 mdnice 多平台发布

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员朱永胜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值