写点什么

强引用、软引用、弱引用、幻象引用的区别

作者:zarmnosaj
  • 2022 年 10 月 10 日
    四川
  • 本文字数:684 字

    阅读完需:约 2 分钟

强引用、软引用、弱引用、幻象引用有什么区别?

首先,为什么要对 Java 对象区别不同的引用类型呢?其主要体现的,其实是对象不同的可达性状态和对 GC 收集垃圾对象的影响。

强引用

强引用是我们最常见的普通对象引用,比例代码中的静态变量(static 修饰),在静态变量的使用中,我们知道,静态变量会一直存在于 JVM 中,随时可供使用。其原因是因为静态变量为强引用,只要是被强引用的对象,就表明对象还存活着,并且不会被垃圾回收机给回收掉。对于普通的对象而言,如果没有其他的引用关系,只要超过了引用的代码块或者是作用域,亦或是在代码中显式地将其值赋为 null,这就表明对象时可以被垃圾收集的了,当然具体回收时机还是要看垃圾收集策略和具体的应用运行情况。

软引用

软引用,是相对强引用弱化一些的一种引用,垃圾收集器进行回收时,不一定会将软引用的对象给回收掉,而只有当 JVM 在进行垃圾回收之后,判定内存不足时,才会去试图回收软引用指向的对象。这样做的话,JVM 可以确保在抛出 OutOfMemoryError 之前,将软引用指向的对象给回收掉。利用这些特性,通常可以将软引用用来实现内存敏感的缓存,这样做可以保证缓存的使用,也可以保证不会因为缓存而将内存耗尽,只有当内存不足时才会清理掉。

弱引用

弱引用也不能保证对象不会被垃圾收集,弱引用仅仅是提供一种访问在弱引用状态下对象的途径。只要发生垃圾回收时,不管当前内存空间是否充足或紧缺,弱引用的对象一定会被回收掉。

幻引用

幻引用也叫做虚引用,对于幻引用,不能通过它进行对象的访问。幻象引用仅仅是提供了一种确保对象被 finalize 以后,做某些事情的机制。虚引用必须和引用队列(RefenenceQueue)联合使用

发布于: 刚刚阅读数: 3
用户头像

zarmnosaj

关注

靡不有初,鲜克有终 2020.02.06 加入

成都后端混子

评论

发布
暂无评论
强引用、软引用、弱引用、幻象引用的区别_10月月更_zarmnosaj_InfoQ写作社区