热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析:强引用、软引用、弱引用与幻象引用的区别与应用场景

本文由编程笔记#小编为大家整理,主要介绍了谈谈强引用,软引用,弱引用,幻象引用有什么区别相关的知识,希望对你有一定的参考价值。在java语言中,除了基本数据类型以外,其他的引用都是各类对象的引用,根据
本文由编程笔记#小编为大家整理,主要介绍了谈谈强引用,软引用,弱引用,幻象引用有什么区别相关的知识,希望对你有一定的参考价值。

在java语言中,除了基本数据类型以外,其他的引用都是各类对象的引用,根据生命周期的长短,分为以下四类:

强引用:我们new的对象所关联的引用就是强引用,当jvm内存空间不足时,宁肯抛出oom运行时错误,也不会将该引用回收来解决内存不足的问题。除非将其赋值为null或者超过引用的作用范围,该引用指向的对象才会被回收。

软引用:通过SoftReference类来实现,软引用的生命周期比强引用短,只有在jvm抛出OOM之前,才会将该引用指向的对象回收。软引用可以和一个引用队列配合使用,如果软引用指向的对象被垃圾回收器回收,jvm就会把这个软引用加入到引用队列中,后面我们可以调用ReferenceQueue的poll方法来检查是否有我们关心的对象被回收,如果队列为空,则返回一个null,否则返回reference对象。

弱引用:通过WeakReference类来实现,弱引用的生命周期比软引用短,在垃圾回收器扫描它所负责的内存区域的过程中,一旦发现有弱引用的对象,无论当前内存空间是否足够,都会将该引用所指向的对象回收。由于垃圾回收器是一个优先级很低的线程,因此不一定会很快的将其回收,所以我们也可以将弱引用配合引用队列来使用,如果弱引用指向的对象被垃圾回收器回收,jvm就会把这个弱引用加入到引用队列中,后续我们好判断我们所关心的弱引用指向的对象是否被回收。

幻象引用:幻象引用也叫虚引用,通过PhantomReference类来实现。我们无法通过虚引用访问它所指向对象的任何属性和方法,如果一个对象仅仅持有虚引用,那么 它就和没有任何引用一样,随时可能被垃圾回收器回收,因此必须搭配引用队列来使用,当垃圾回收期准备回收一个对象时,如果发现它还有虚引用,那么就在回收之前将它放入引用队列并采取操作。


推荐阅读
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文介绍了如何通过配置 Android Studio 和 Gradle 来显著提高构建性能,涵盖内存分配优化、并行构建和性能分析等实用技巧。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 本文总结了Java程序设计第一周的学习内容,涵盖语言基础、编译解释过程及基本数据类型等核心知识点。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • 本文详细介绍了如何正确配置Java环境变量PATH,以确保JDK安装完成后能够正常运行。文章不仅涵盖了基本的环境变量设置步骤,还提供了针对不同操作系统下的具体操作指南。 ... [详细]
  • 洞态IAST Java Agent 实现AOP技术详解
    本文深入探讨了洞态IAST Java Agent如何通过AOP技术实现方法调用链和污点值传播等功能,为读者提供了详细的源码分析。 ... [详细]
  • 本文详细介绍了Java中的注解功能,包括如何定义注解类型、设置注解的应用范围及生命周期,并通过具体示例展示了如何利用反射机制访问注解信息。 ... [详细]
author-avatar
sunsijia
业精于勤荒于嬉
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有