Java引用类型分类以及详解

Java引用类型分类以及详解Java 引用类型分类以及详解 Java 引用类型概述在 JVM 之中再好的算法 也敌不过一个好烂的程序员 一个程序要想写好有两点 按照开发标准进行 请写有用代码 而对于垃圾的产生与回收的处理之中 要想进行更好的控制 就必须清楚的掌握 Java 中的四种引用方式 强引用 StrongRefere 即使进行了多次的 GC 回收 即使 JVM 真的已经不够用了 即使 JVM 最终不得已抛出了 O

Java引用类型分类以及详解

Java引用类型概述

  • 强引用

强引用是Java默认支持的一种操作模式,也就是说在引用的处理其间,即使出现有GC,即使内存不足,该引用的数据也不会被回收。

范例:观察强引用:

这里写图片描述
这个流程就叫做强引用。在之前所编写的所有操作都属于强引用,而强引用只有全部的对象都断开连接之后,才可能称为垃圾空间,才有可能被回收。而即使有一个对象引用此空间,那么该对象也不会被回收。
在多线程状态下,即使产生多个引用对象,空间也不会被回收。

这里写图片描述
每个线程都会出现OOM
强引用并不是造成OOM的关键性因素,正常来讲,你每一个用户(线程)操作完成后,该对象都可以被很容易的进行回收,不必强制性进行回收。

  • 软引用
    软引用指的是当内存不足的时候才进行GC的空间释放,但是如果要想使用软引用必须单独使用特殊的处理类:
    java.lang.ref.SoftReference,该类的定义如下:

这里写图片描述
除了强引用,其它引用必须借助特殊类来完成。

这里写图片描述
软引用的类继承了Reference的引用父类。
这个类下有三个引用:
这里写图片描述


在软引用之中如果想要进行引用的处理操作,则可以使用如下的方法完成:

  • 弱引用
    弱引用最大的特点就是一旦发生了GC的处理操作,则保存的引用内容将立即释放。弱引用使用“WeakReference”类来完成。
    java.lang.ref.WeakReference

这里写图片描述

这里写图片描述

  • 引用队列
    在之前使用软引用和弱引用的时候都会发现有这样一个构造方法:
    SoftReference:
    这里写图片描述
    WeakReference:
    这里写图片描述
    java.lang.ref包中一共五各类:一个父类,三个子类,另外一个就是引用队列。





这里写图片描述
通过以上的图形分析可以发现,如果要想找到“对象5”,那么一共有两条对象的可及性的路径:
这里写图片描述

引用队列里面保存的就是一个要准备被回收的对象的信息。

  • 幽灵引用(虚引用)
    幽灵引用指的是什么都不保存,但是又看起来像是保存了一样。
    这个的处理类java.lang.ref.PhantomReference。

需要发生引用但是又不需要引用占用空间的时候。—采用幽灵引用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178932.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午4:12
下一篇 2026年3月26日 下午4:12


相关推荐

  • clearTimeout无效

    clearTimeout无效如图所示 clearTimeout 接受 id 作为参数 所以检查一下是否传入的不是 id 因为默认情况下 setTimeout 方法是会返回 id 但有时候会返回一个 setTimeout 对象比如使用 vsCode 开发的同学在使用 setTimeout 时会自动引入 timer 对象 此时 setTimeout 就会返回 Timeout 对象 此时只需要将对应的 id 传入即可或者直接将引用注掉

    2026年3月20日
    2
  • jQuery图片延迟加载

    这里延迟加载的意思是,拖动滚动条时,在图片出现在浏览器显示区域后才加载显示。在这之前全部图片都由一张图片代替。节省流量,减轻服务器负担。效果展示 http://hovertree.com/t

    2021年12月28日
    47
  • webstorm 2021激活码【2021.8最新】

    (webstorm 2021激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月26日
    47
  • java中的适配器是什么及有什么作用(通熟易懂)

    java中的适配器是什么及有什么作用(通熟易懂)其实适配器只是一个类,它实现了某种接口,提供了方法体。这样,再用到这个接口时,可以直接继承适配器,这样就不需要把接口中的每一个方法再填充一遍了,只需要在这个类中复写一下需要用的方法。这样简单,方便。这只是一个简化编程的模式,举个例子,比如java的鼠标监听接口有七个方法,但是往往我们要处理的只是其中一两个方法,但是实现这个接口就必须为了java语法而去重写七个方法,这是毫无意义的,

    2022年6月3日
    42
  • linux iptable设置防火墙

    linux iptable设置防火墙Iptables防火墙规则使用梳理 iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。在日常Linux运维工作中,经常会设置iptables防火墙规则,用来加固服务安全。以下对iptables的规则使用做了总结性梳理:iptables首先需要了解的…

    2022年5月27日
    43
  • Python 递归的多种写法

    Python 递归的多种写法题目背景:让我们来看一些例子。要对一个数字列表(或者其他序列)求和,我们可以使用内置的sum函数,或者自己编写一个更加定制化的版本。这里是用递归编写的一个定制求和函数的示例defmysum(L): ifnotL: return0 else: returnL[0]+mysum(L[1:])这是一种最基本的递归写法,通过递归的方式将列表中的所有进行相加,典型的鸭子类型…

    2022年6月16日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号