Java WeakReference

四种引用在什么时候会被回收 【四种引用在什么时候会被回收】 阅读详情

关于WeakReference的定义引用维基百科定义

在计算机程序设计中,弱引用与强引用相对,是指不能确保其引用的对象不会被垃圾回收器回收的引用。一个对象若只被弱引用所引用,则被认为是不可访问(或弱可访问)的,并因此可能在任何时刻被回收。一些配有垃圾回收机制的语言,如Java、C#、Python、Perl、Lisp等都在不同程度上支持弱引用。

1. WeakReference引用的对象什么时候被回收?

WeakReference所引用的对象,会在垃圾回收发生时被回收,但是是有前提条件的。我们知道垃圾回收分为minorGC 和 majorGC。如果发生若了minorGC,而弱引用指向的对象,只有弱引用,没有其他引用,而且对象在新生代中,才会被回收掉。如果发生了majorGc,如果对象只被弱引用引用,对象会被回收掉。

 WeakReference<String> weakReference = new WeakReference<String>(new String("Hello WeakReference"));
        System.out.println(weakReference.get());
        System.gc();
        try {
            TimeUnit.MILLISECONDS.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(weakReference.get());
输出结果如下

Hello WeakReference
[GC (System.gc())  883K->472K(9728K), 0.0008970 secs]
[Full GC (System.gc())  472K->381K(9728K), 0.0125556 secs]
null

如上证实了发生gc 只有WeakReference指向的对象会被回收掉

2.考虑这种情况呢
 WeakReference<String> weakReference = new WeakReference<String>("Hello WeakReference");
        System.out.println(weakReference.get());
        System.gc();
        try {
            TimeUnit.MILLISECONDS.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(weakReference.get());
输出结果如下

Hello WeakReference
[GC (System.gc())  887K->504K(9728K), 0.0124477 secs]
[Full GC (System.gc())  504K->381K(9728K), 0.0300315 secs]
Hello WeakReference

为什么这种情况下没有被回收掉呢?原因是”Hello WeakReference”是分配在常量池中,并不是分配在java堆中java gc并不会回收掉

部署Doris 本文详细介绍了Apache Doris三节点集群(3 FE + 3 BE)的部署流程。首先从硬件配置、系统参数调优等准备工作入手,然后分步说明FE和BE节点的配置方法,包括端口设置、存储路径规划等关键参数。部署完成后提供SQL测试用例和数据一致性验证方法,并总结常见问题解决方案,如节点加入失败、磁盘容量异常等。文档包含完整的命令和配置示例,强调高可用配置和监控建议,为生产环境部署提供实用指导。 阅读详情

相关推荐

【CTFhub】——hate_php2021

【CTFhub】——hate_php2021

manerzi的博客 1605

关于Java中的WeakReference

WeakReference 阅读原文请访问我的博客BrightLoong's Blog 一. 简介 在看ThreadLocal源码的时候,其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc,为了能搞清楚ThreadLocal,只能先了解下了WeakReferenc(是的,很多时候为了搞清楚一个东西,不得不往上追好...

brightloong的博客 1874

Webug4.0 打靶笔记

一、Webug 的安装 (1)基本信息 WeBug 名称定义为”我们的漏洞”靶场环境 ,基础环境是基于 PHP/mysql 制作搭建而成,中级环境与高级环境分别都是由互联网漏洞事件而收集的漏洞存在的操作环境。部分漏洞是基于Windows操作系统的漏洞所以将WeBug的web环境都装在了一个纯净版的Windows 2003的虚拟机中。在 webug3.0 发布后的四百多天 226安全团队终于在大年初二发布了 webug 的 4.0 版本。 (2)虚拟机的安装 最新超详细VMware虚拟机下载与安装_隐

m0_60716947的博客 6128

Java中的弱引用WeakReference详解

最近再看ThreadLocal源码,其中内部类ThreadLocalMap中的Entry类继承了WeakReference,其表示key的ThreadLocal对象是通过弱应用指向,如果外部没有强引用对象指向ThreadLocal对象的时候就会被GC回收掉,不论当前的内存空间是否足够,这个对象都会被回收 一、WeakReference源码,其中只有两个构造函数 public class WeakReference<T> extends Reference<T> { //(1).

OceanSky的专栏 2436

嵌入式开发避坑指南:手把手教你用STM32CubeMX配置W9825G6KH SDRAM(含时序参数详解)

本文详细介绍了如何使用STM32CubeMX配置W9825G6KH SDRAM,包括硬件连接检查、CubeMX初始化步骤、时序参数优化及稳定性问题排查。通过实测波形分析和案例分享,帮助开发者避免常见配置错误,提升嵌入式系统性能与稳定性。

weixin_42542669的博客 197

Mike 21如何制作随水深变化的糙率文件

MIKE 21如何制作随水深变化的糙率文件

zhuzhujiayoua的博客 2250

Java弱引用(WeakReference)的理解与使用

而复杂一点的情况,比如使用cache,因为cache的对象正是程序运行需要的, 那么只要程序正在运行, cache中的引用就不会被GC,那么随着cache中的引用越来越多, GC无法回收的对象也越来越多, 无法被自动回收,此时就必须有开发者来进行处理回收,显然也违背了java自动回收机制。Java对于简单的情况, 手动置空是不需要程序员来做的, 因为在java中, 对于简单对象, 当调用它的方法执行完毕后, 指向它的引用会被GC回收,Person p = new Person("张三",18,"男");

u010227042的博客 2213

交换机基本介绍(分类、性能指标、硬件构成及工作方式)

一、交换机的分类与性能指标 1.1交换机的分类 按照网络构成方式来分的话,交换机分为三类:接入层交换机、汇聚层交换机和核心层交换机。 按照OSI模型来划分的话,分为:二层交换机、三层交换机和四层交换机 还有一种按照硬件形态来划分,可以分成两类:盒式交换机和机框式交换机。 盒式交换机是一种有固定端口数,有时也会带有少量扩展槽的交换机。机架式交换机是一种插槽式的交换机,这种交换机扩展性较好,可支持不同的网络类型,可支持更大端口密度的网络。一般在数据中心的接入层都会采用盒式交换机,盒式...

monologuezjp的博客 4万+

Java中的WeakReference

java语言中为对象的引用分为了四个级别,分别为 强引用 、软引用、弱引用、虚引用。 强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。 ps:强引用其实也就是我们平时A a = new

carter_yu的博客 702

单细胞数据导入实战:Read10X函数常见报错与解决方案

本文针对单细胞转录组分析中Read10X函数数据导入的常见问题,提供了详细的实战解决方案。重点解析了因文件路径错误、压缩文件未解压、版本命名不符及内存不足导致的报错,并给出了检查路径、正确解压、重命名文件、调整参数及优化内存等具体操作步骤,帮助用户高效完成单细胞数据导入,为后续分析奠定坚实基础。

weixin_28235513的博客 239

第069篇:浸入边界法进阶

浸入边界法(Immersed Boundary Method, IBM)是处理流固耦合问题的强大数值方法。本文深入介绍直接力法、反馈力法、Ghost Cell方法和多域IBM等高级技术。通过Python实现完整的IBM求解器,展示处理移动边界、弹性边界和多体相互作用的方法。浸入边界法,直接力法,反馈力法,Ghost Cell,流固耦合,移动边界,弹性边界Navier-Stokes方程添加体积力项:∂u∂t+(u⋅∇)u=−1ρ∇p+ν∇2u+f\frac{\partial \mathbf{u}}{\part

2401_87715305的博客 413

java WeakReference 用法 原理

WeakReference(弱引用)是Java中的一种特殊引用类型,当垃圾回收器扫描时,只要对象仅被弱引用关联且没有其他强引用,就会被立即回收。与强引用不同,弱引用不会阻止垃圾回收。典型应用包括实现内存敏感缓存,当内存不足时自动清除缓存条目,避免内存泄漏。使用WeakReference时需注意配合ReferenceQueue进行清理,并处理get()返回null的情况。相比SoftReference(内存不足才回收),WeakReference回收更激进。主要用途包括规范化映射、缓存和监听器列表等场景,可有

zfj321的博客 1675

MCP开发实战:基于openEuler系统MCP插件的开发、测试与发布全流程

MCP开发实战:基于openEuler系统MCP插件的开发、测试与发布全流程

jks212454的博客 555

关于 Java 中的 WeakReference

一. 简介 WeakReference 如字面意思,弱引用,当一个对象仅仅被weak reference(弱引用)指向, 而没有任何其他strong reference(强引用)指向的时候, 如果这时GC运行, 那么这个对象就会被回收,不论当前的内存空间是否足够,这个对象都会被回收。 二. 认识WeakReference类 WeakReference 继承 Reference,其中只有两个构造函数: public class WeakReference<T> extends Reference&

weixin_42814000的博客 1788

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JAVA WeakReference

在Java 1.2中就引入了java.lang.ref这个包,WeakReference就属于这个包。WeakReference是干嘛的呢,一言弊之,它是和Java中的垃圾回收相关的。如果一个对象只有WeakReference引用它,那么这个对象就可能被垃圾回收器回收。 在什么场合下应用WeakReference呢? 有时我们会碰到一些不能继承的类,如final class, 或者通过

Crazy Bird 7233

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深入理解 Java WeakReference

WeakReference 在 Java 内存管理体系中占据着独特的地位,它为开发者提供了一种在特定场景下精细控制对象生命周期的手段。通过深入理解其原理、应用场景以及注意事项,我们能够在开发中更好地利用弱引用来优化内存使用,避免因对象持有不当导致的内存泄漏问题,提升应用程序的性能与稳定性。无论是构建复杂的缓存系统,还是处理对象间微妙的生命周期依赖关系,WeakReference 都是我们手中的有力武器,合理运用它,能让 Java 程序在内存这片 “战场” 上更加游刃有余。

m0_72256543的博客 1213

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java WeakReference和SoftReference的区别

转载自:http://blog.youkuaiyun.com/zhandoushi1982/article/details/8745027 在Java 1.2中就引入了java.lang.ref这个包,WeakReference就属于这个包。WeakReference是干嘛的呢,一言弊之,它是和Java中的垃圾回收相关的。如果一个对象只有WeakReference引用它,那么这个对象就可能被垃圾回收

hello_tree的专栏 3700

Java中关于WeakReference和WeakHashMap的理解

新美大的10月11日的笔试中有一道选择题,让选择函数返回结果,代码如下: 1 private static String test(){ 2 String a = new String("a"); 3 WeakReference<String> b = new WeakReference<String>(a); 4 ...

weixin_33937499的博客 263

ZT JAVA WeakReference

JAVA WeakReference 分类: JAVA 2012-08-28 16:08 305人阅读 评论(0) 收藏 举报 javareferencehashmapcacheclassnull 在Java 1.2中就引入了java.lang.ref这个包,WeakReference就属于这个包。WeakReference是干嘛的呢,一言弊之,它是和 Java中的垃圾回收相关的...

weixin_30701521的博客 66

Java的WeakReference和SoftReference

在Java 1.2中就引入了java.lang.ref这个包,WeakReference就属于这个包。WeakReference是干嘛的呢,一言弊之,它是和Java中的垃圾回收相关的。如果一个对象只有WeakReference引用它,那么这个对象就可能被垃圾回收器回收。         在什么场合下应用WeakReference呢? (1) 有时我们会碰到一些不能继承的类,如final cla

zhandoushi的专栏 4795

java中的WeakReference(弱引用)

java中的weakReference-弱引用 1.介绍 阅读ThreadLocal源码中,其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc,为了能搞明白ThreadLocal,需要对类WeakReference进一步认识。WeakReference如字面意思,弱引用, 当一个对象仅仅被weak reference(弱引用)指向, 而没有任何其他strong reference(强引用)指向的时候, 如果这时GC运行, 那么这个对象就会被回收,不论当前的内存空间是否足够,这

qq_27242695的博客 684

weakreference java_Java弱引用(WeakReference)的理解与使用

看到篇帖子, 国外一个技术面试官在面试senior java developer的时候, 问到一个weakreference相关的问题. 他没有期望有人能够完整解释清楚weak reference是什么, 怎么用, 只是期望有人能够提到这个concept和java的GC相关. 很可惜的是, 20多个拥有5年以上java开发经验的面试者中, 只有两人知道weak reference的存在, 而其中...

weixin_36076139的博客 139

Java学习笔记:WeakReference

本文是自己学习的一个总结,主要学习资料来自Java文档和以下链接。 https://brightloong.github.io/2018/05/27/关于Java中的WeakReference/#more @[TOC]( ) 1、WeakReference简介 这个类其实是对应着JVM中的弱引用的概念。与此类似的还有强引用,虚引用,软引用。 弱引用的特征是,一旦弱引用被GC注意到,那弱引用的引用对象就会被回收。但是弱引用本身不会被回收。 一开始是为了弄懂ThreadLocal才来学习WeakRefere

sinat_38393872的博客 314

java WeakReference

在Java 1.2中就引入了java.lang.ref这个包,WeakReference就属于这个包。WeakReference是干嘛的呢,一言弊之,它是和Java中的垃圾回收相关的。如果一个对象只有WeakReference引用它,那么这个对象就可能被垃圾回收器回收。 在什么场合下应用WeakReference呢? 有时我们会碰到一些不能继承的类,如final class, 或者...

weixin_34346099的博客 101
上一篇: Java LinkedHashMap详解
下一篇: Java非静态内部类外部this对象和final类型详解
字节小站
博客等级 码龄10年 53粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值