Java软引用&弱引用使用示例代码

深入理解Java中的强、软、弱、虚引用 在Java内存管理中,引用类型直接决定了对象的生命周期。除了最常见的强引用,Java还提供了软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)三种特殊引用类型。本文将结合代码示例,深入解析这四种引用的特性和使用场景。 阅读详情

一、示例代码

public class ReferencesObjs {

	static class M2Object {
		byte[] m2 = new byte[2 * 1024 * 1024];
	}
	
	public static void main(String[] args) throws Exception {
		M2Object o = new M2Object();
		SoftReference<M2Object> s = new SoftReference<ReferencesObjs.M2Object>(o);
		o = null;
		System.gc();
		Thread.sleep(100);
		System.out.println(s.get() == null);
		
		o = new M2Object();
		WeakReference<M2Object> m = new WeakReference<ReferencesObjs.M2Object>(o);
		o = null;
		System.gc();
		Thread.sleep(100);
		System.out.println(m.get() == null);
		System.out.println(s.get() == null);
	}
}

二、JVM参数

-Xmx5M -Xloggc:gc.log

三、输出

false
true
true

四、gc.log日志

Java HotSpot(TM) Client VM (25.111-b14) for windows-x86 JRE (1.8.0_111-b14), built on Sep 22 2016 18:54:33 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 12463344k(4247680k free), swap 24924828k(14339656k free)
CommandLine flags: -XX:InitialHeapSize=5242880 -XX:MaxHeapSize=5242880 -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:-UseLargePagesIndividualAllocation 
0.225: [Full GC (System.gc())  3083K->2699K(5952K), 0.0023907 secs]
0.328: [GC (Allocation Failure)  2732K->2699K(5952K), 0.0001911 secs]
0.328: [Full GC (Allocation Failure)  2699K->2699K(5952K), 0.0014690 secs]
0.330: [Full GC (Allocation Failure)  2699K->640K(5952K), 0.0014604 secs]
0.332: [Full GC (System.gc())  2721K->640K(5952K), 0.0016531 secs]

五、参考链接

  1. 如何通过软引用和弱引用提升JVM内存使用性能!
[Android] Android开发优化之——使用软引用和弱引用 Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。这里重点介绍一下软引用和弱引用。如果一个对象只具有软引用,那么如果内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。软引用 阅读详情

相关推荐

ChipCamp探索系列 -- 7A. 开源CPU之BOOM的来龙去脉

本文梳理一下Berkeley的乱序超标量CPU项目----Berkeley Out of Order Machine (BOOM),作为探索7系的首篇(7A)。

ChipCamp的博客---https://chipcamp.blog.youkuaiyun.com/ 1558

WeakReference

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

G的博客 329

ArcMap 10.7/10.8启动加载界面后闪退?可能是这个隐藏的Normal.mxt模板文件在搞鬼

本文深入分析了ArcMap 10.7/10.8启动加载界面后闪退的问题,指出Normal.mxt模板文件损坏是常见原因。提供了从定位、删除模板文件到系统级修复的完整解决方案,帮助GIS工程师快速恢复工作流程。

weixin_28523493的博客 330

JAVA软引用与弱引用及其应用举例

1. 定义强引用、软引用和弱引用的方式 new出来的是强引用,比如String str = new String(“123” ); 弱引用: WeakReference&lt;String&gt; weakRef=new WeakReference&lt;String&gt;(str); 其中str是引用 软引用: SoftReference&lt;String&gt; softRef...

洺润Star的博客 1627

Frida实战:如何用adb快速连接网易mumu模拟器进行参数Hook(附常见CPU架构问题排查)

本文详细介绍了如何使用Frida和adb快速连接网易MuMu模拟器进行参数Hook,包括环境配置、架构适配、Frida-server部署及常见问题排查。特别针对CPU架构兼容性问题提供了实用解决方案,帮助开发者高效完成逆向调试任务。

weixin_29274969的博客 289

大数据应用技术实验报告一 Hadoop三种模式安装配置

JDK+Hadoop安装配置、单机模式配置 以下操作在SecureCRT里面完成 1.关闭防火墙 firewall-cmd --state 显示防火墙状态running/not running systemctl stop firewalld 临时关闭防火墙,每次开机重新开启防火墙 systemctl disable firewalld 禁止防火墙服务。 2.传输JDK和HADOOP压缩包 Sec...

Ruthless_Childe的博客 3090

Java中的软引用、弱引用 通俗举例实战详解

在Java中,软引用(SoftReference)和弱引用(WeakReference)是两种特殊的引用类型,它们主要用于优化内存管理和垃圾回收过程。

m0_72556244的博客 555

18. 从 SAP Fiori Elements List Report 中的图片显示,谈谈背后的 XML Template 设计机制

至此,Fiori Elements List Report 这个模版里,图片显示的原理,笔者已经从开发人员层面需要定义的注解,和 Fiori Elements 框架层面如何解析这些注解,这两方面做了深入介绍。从本文开始,我们从 Fiori Elements 预制的标准 XML Template 模版的设计,来介绍我们在最终 Fiori Elements 页面看到的产品图标,是如何渲染出来的。但是,List Report 里产品的图标显示,到底是上面这些 XML 文件里的哪一个里定义的呢?

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 607

译文:理解Java中的弱引用

不久之前,我面试了一些求职Java高级开发工程师的应聘者。我常常会面试他们说,“你能给我介绍一些Java中得弱引用吗?”,如果面试者这样说,“嗯,是不是垃圾回收有关的?”,我就会基本满意了,我并不期待回答是一篇诘究本末的论文描述。 然而事与愿违,我很吃惊的发现,在将近20多个有着平均5年开发经验和高学历背景的应聘者中,居然只有两个人知道弱引用的存在,但是在这两个人之中只有一个人真正了解这方面的知识...

技术小黑屋 480

【QT开发教程】Qt中的数据加密与解密

在现代应用程序中,数据加密与解密是保护敏感信息的重要手段。Qt本身并不直接提供数据加密与解密的支持,但可以使用第三方库,如OpenSSL或Crypto++,来实现这一功能。本文将介绍如何在Qt中使用OpenSSL进行数据加密与解密,包括基本概念、使用方法以及一些实际的示例。

科技改变人类,技术成就未来 1156

基于simulink的预测电流控制策略的三相逆变器仿真

本文详细介绍了在Simulink中实现基于预测电流控制策略的三相逆变器仿真方法。主要内容包括:准备工作(安装必要软件及工具箱)、构建三相逆变器基础模型、设计预测电流控制器(包含状态空间建模和控制器设计)、实现控制逻辑、添加示波器观察输出、配置仿真参数以及运行仿真分析结果。通过MATLAB代码示例和Simulink模块说明,展示了如何选择最优开关状态来最小化电流误差。该仿真方法为研究快速响应、高精度的逆变器控制提供了实用工具,但需注意实际应用中可能需要的调试工作。

amy_mhd的博客 274

Java基础 之软引用、弱引用、虚引用

小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!如果你需要这些资料,⬅专栏获取Manager。查看复制到剪贴板打印8.4配合使用引用队列。

2401_85763952的博客 1247

Hermes 教程 03:Skills 系统

摘要:Hermes Skills是一种自我改进机制,可将解决问题的经验保存为可复用技能文档。v0.13.0版本遵循agentskills.io开放标准,与Claude Skills互通。技能创建流程包括发现问题、创建技能文件、加载使用和优化更新四个阶段。系统提供技能检索和自维护机制(Curator),支持技能媒体路由和多种管理命令。内置技能涵盖开发调试、创意头脑风暴等场景,通过积累技能使Hermes更适应用户需求。

程序猿_三产 728

Java的强引用,软引用,弱引用,虚引用及其使用场景

从 JDK1.2 版本开始,Java 把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。 1、强引用(Strong Reference) 强引用就是我们经常使用的引用,其写法如下: Object&amp;nbsp;o&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Object(); 只要还有强引用指向一个对象,垃圾收集器就不会回收这个...

Jaqen's Blog 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java面试-强引用、软引用、弱引用、虚引用的使用场景

本文系统解析了Java中的四种引用类型:强引用、软引用、弱引用和虚引用。通过生动的比喻和代码示例,详细阐述了它们的特点、使用场景及回收机制。强引用如&quot;铁哥们&quot;般可靠但易导致内存泄漏;软引用适合实现内存敏感缓存;弱引用常用于ThreadLocal等防泄漏设计;虚引用则用于对象回收跟踪。文章还提供了四种引用的对比图表和面试常见问题解答,帮助开发者深入理解Java内存管理机制,写出更高效健壮的代码。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java里强引用、软引用、弱引用、幻引用区别总结

在Java中,引用类型决定了对象的生命周期以及垃圾收集器如何处理这些对象。这里有四种引用类型:强引用、软引用、弱引用和幻象引用(也称虚引用)。这四种引用类型提供了不同程度的控制,使得开发人员能够更精细地管理对象的生命周期和内存使用。

小小默:进无止境 1642

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

理解 Java 软引用、弱引用、虚引用及其使用场景

几乎所有允许动态分配内存的计算机语言都会遇见一个共同问题——如何“收集”不在使用的内存。 有点和餐厅类似,开始时,餐厅的所有餐桌均处于空闲状态,可供顾客使用。但是,当所有餐桌都已经被分配给客户时,就需要检查哪些已经被分配的餐桌处于空闲状态。 有些语言,比如 C 语言,把这个责任交给用户:分配到了内存,那么你就有责任释放内存。这就和快餐很像,用完餐后,需要把餐桌整理干净。如果所有顾客都这样正确处理,这种方式效率很高,但是,如果有顾客忘记清理餐桌,就会出现问题。内存空间也一样,很容易忘记释放已经分配的内存。

x1113162924的博客 2942

软引用和弱引用的区别_聊聊Java中的软引用、弱引用、虚引用

static字段的生命周期static字段如果放入父类的话,只会产生一个static字段,因为static字段不能再子类中复制,static方法不会动态绑定,static方法不具有多态性。所以,尽量少用static,因为它和类的生命周期是一样的。说明:如果想继续持有对某个对象的引用,希望以后还能够访问到该对象,但是也希望能够允许垃圾回收器释放它,这时就应该使用Reference对象(三个继承自抽象...

weixin_39843847的博客 4257

Java中怎样利用软引用和弱引用来避免oom

Java架构进阶面试及知识点文档笔记这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理Java分布式高级面试问题解析文档其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!互联网Java程序员面试必备问题解析及文档学习笔记Java架构进阶视频解析合集[外链图片转存中…(img-sMJXUzKJ-1719265398648)]

2401_85112148的博客 740

Java中弱引用、软引用、虚引用及强引用的区别

前言从Jdk1.2开始,在java.lang.ref包下就提供了三个类:SoftReference(软引用),PhantomReference(虚引用)和WeakReference(弱引用),它们分别代表了系统对对象的中的三种引用方式:软引用,虚引用以及弱引用。因此java语言对对象的引用有如下四种。可能有些工作经验比较丰富的java程序员都不太明白这几种引用的区别,仅仅只是知道而已。但是知道弱引用

qwli7 3147

Java四种引用:强引用、软引用、弱引用和虚引用代码示例(转载)

Java四种引用:强引用、软引用、弱引用和虚引用代码示例(转载) Java 如何有效地避免OOM:善于利用软引用和弱引用。 想必很多朋友对OOM(OutOfMemory)这个错误不会陌生,而当遇到这种错误如何有效地解决这个问题呢?今天我们就来说一下如何利用软引用和弱引用来有效地解决程序中出现的OOM问题。下面是本文的目录大纲: 第一、了解 强引用、软引用、弱引用、虚引用的概念 第二、进一步理解软引用和弱引用 第三、如何利用软引用和弱引用解决OOM问题 如果有不正之处,希望谅解和批评指正,不胜感激。 请尊重作

username_is的博客 747

强引用,软引用,弱引用

一、软引用和弱引用的用法 软引用(SoftReference)的含义是,如果一个对象只具有软引用,而当前虚拟机堆内存空间足够,那么垃圾回收器就不会回收它,反之就会回收这些软引用指向的对象。 弱引用(WeakReference)与软引用的区别在于,垃圾回收器一旦发现某块内存上只有弱引用(一定请注意只有弱引用,没强引用),不管当前内存空间是否足够,那么都会回收这块内存。 见如下实例 pub...

3500

JAVA的几种引用:强引用、软引用、弱引用、虚引用

JAVA的几种引用:强引用、软引用、弱引用、虚引用1、强引用2、软引用3、弱引用4、虚引用 1、强引用 强引用就是代码里写的Object obj=new Object() 只要强引用存在,垃圾收集器就不会回收被引用的对象。 当JVM内存空间不足,JVM宁愿抛出OutOfMemoryError运行时错误,使程序异常终止,也不会靠随意回收具有强引用的“存活”对象来解决内存不足的问题。 2、软引用 下面展示一段软引用代码。 //这里是强引用 Sample sample = new Sample(); //so

猛犸王的博客 1511
上一篇: java.lang.StackOverflowError——因为设置Xss不恰当而导致的虚拟机栈溢出
下一篇: 排序算法——冒泡排序
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值