永远不要使用双花括号初始化实例,除非你想OOM

Java 中发生内存泄漏 5 个场景以及解决方法 前言 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和 Java 联系起来。在 Java 中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM 来处理。顾名思义,垃圾回收就是释放垃圾占用的空间,但垃圾回收器并不是万能的,它能够处理大部分场景下的内存清理、内存泄露以及内存优化。但它也并不是万能的,不然我们在项目实践过程中也不会出现那么多的内存泄漏的问题,很多的内存泄漏都是因为开发人员操作不当导致的。 本篇文章我们就来聊聊内存泄露的原因是什么,以及如何在 阅读详情

生活中的尴尬无处不在,有时候你只是想简单的装一把,但某些“老同志”总是在不经意之间,给你无情的一脚,踹得你简直无法呼吸。

 

但谁让咱年轻呢?吃亏要趁早,前路会更好。

喝了这口温热的鸡汤,咱们来聊聊是怎么回事。

事情是这样的,在一个不大不小的项目中,小王写下了这段代码:

Map<String, String> map = new HashMap() {
  
  {
    put("map1", "value1");
    put("map2", "value2");
    put("map3", "value3");
}};
map.forEach((k, v) -> {
    System.out.println("key:" + k + " value:" + v);
});

本来是用它来替代下面这段代码的:

Map<String, String> map = new HashMap();
map.put("map1", "value1");
map.put("map2", "value2");
map.put("map3", "value3");
map.forEach((k, v) -> {
    System.out.println("key:" + k + " value:" + v);
});

两块代码的执行结果也是完全一样的:

key:map3 value:value3

key:map2 value:value2

key:map1 value:value1

所以小王正在得意的把这段代码介绍给部门新来的妹子小甜甜看,却不巧被正在经过的老张也看到了。

老张本来只是想给昨天的枸杞再续上一杯 85° 的热水,但说来也巧,刚好撞到了一次能在小甜甜面前秀技术的一波机会,于是习惯性的整理了一下自己稀疏的秀发,便开启了 diss 模式。

“小王啊,你这个代码问题很大啊!”

“怎么能用双花括号初始化实例呢?”

此时的小王被问的一脸懵逼,内心有无数个草泥马奔腾而过,心想你这头老牛竟然也和我争这颗嫩草,但内心却有一种不祥的预感,感觉自己要输,瞬间羞涩的不知该说啥,只能红着小脸,轻轻的“嗯?”了一声。

老张:“使用双花括号初始化实例是会导致内存溢出的啦!侬不晓得嘛?”

小王沉默了片刻,只是凭借着以往的经验来看,这“老家伙”还是有点东西的,于是敷衍的“哦~”了一声,仿佛自己明白了怎么回事一样,,其实内心仍然迷茫的一匹,为了不让其他同事发现,只得这般作态。

于是片刻的敷衍,待老张离去之后,才悄悄的打开了 Google,默默的搜索了一下。

小王:哦,原来如此......

双花括号初始化分析

首先,我们来看使用双花括号初始化的本质是什么?

以我们这段代码为例:

Map<String, String> map = new HashMap() {
  
  {
    put("map1", "value1");
    put("map2", "value2");
    put("map3", "value3");
}};

这段代码其实是创建了匿名内部类,然后再进行初始化代码块。

这一点我们可以使用命令 javac 将代码编译成字节码之后发现,我们发现之前的一个类被编译成两个字节码(.class)文件,如下图所示:

NFT生成系统:可控随机性与链上确定性工程实践 NFT生成不是简单的图像拼接,而是融合数字艺术、密码学与区块链工程的复合技术体系。其核心在于用可控随机性替代伪随机,通过本地哈希固化、离线图层合成与ERC-721元数据规范,保障每件作品的唯一性、可验证性与跨平台一致性。关键技术包括SHA-256哈希校验、PIL精准图像合成、泊松分布稀有度建模及OpenSea兼容元数据结构,广泛应用于独立艺术家发行、品牌定制NFT和链上资产教学场景。本文详解一套经7个主网上线项目验证的NFT生成流水线,覆盖图层管理、种子安全、稀有度审计与IPFS协同等硬核实践。 阅读详情

相关推荐

JAVA中使用双括号来初始化静态常量的小技巧

主要介绍了JAVA中使用双括号来初始化静态常量的小技巧,需要的朋友可以参考下

DANN实战:用Python手把手教你实现对抗迁移学习(附完整代码)

本文通过Python实战教程,手把手教你实现DANN对抗迁移学习模型,以解决领域偏移问题。文章详细解析了领域对抗神经网络的核心机制,包括梯度反转层和领域判别器的构建,并提供了从数据准备、模型搭建到训练评估的完整代码,帮助开发者快速掌握这一强大的无监督领域自适应技术。

net55的博客 318

使用libx265对YUV进行h265编码

使用libx265对YUV进行h265编码

Embedded engineer 3080

国产SR8201F以太网PHY芯片调试避坑指南:从机贴失败到杜邦线救场的实战记录

本文详细介绍了国产SR8201F以太网PHY芯片的调试避坑指南,涵盖硬件设计、PCB布局、SMT贴片及软件驱动等关键环节。通过实战案例解析,帮助工程师解决MII/RMII接口配置、电源设计、信号完整性等典型问题,提升以太网通信稳定性与EMC性能。

c6d7e8f9g的博客 1216

保姆级教程:在Win10/Win11上搞定AppScan 10.0.0安装与许可证激活(含常见报错解决)

本文提供AppScan 10.0.0在Win10/Win11上的详细安装与许可证激活指南,涵盖环境准备、分步安装、文件替换技巧及常见报错解决方案。通过专业的安全测试工具部署实践,帮助用户高效完成安装并避免常见陷阱,提升Web应用安全扫描效率。

weixin_30800987的博客 425

从CTF到实战:Frida Hook无导出SO函数的3种特殊姿势

本文深入探讨了在移动安全逆向工程中,如何利用Frida Hook无导出SO函数的三种高级技巧:字符串引用定位法、调用栈回溯法和内存特征码扫描。针对安卓So层加固和混淆场景,文章结合CTF赛题与实战案例,详细解析了每种方法的原理、实现步骤与适用场景,为安全研究人员提供了从理论到实践的完整解决方案。

jenkins8butler的博客 516

Kaggle时间序列竞赛金牌方案解析与实战指南

本文深度解析了Kaggle时间序列竞赛的金牌方案,揭示了其成功不仅依赖先进模型,更在于系统工程思维。文章系统阐述了从数据理解、特征工程到模型集成与后处理的全流程,并重点剖析了分层建模、自定义损失函数、时序交叉验证等核心技巧,为参赛者提供了从理论到实战的完整指南。

weixin_29196315的博客 357

ANSYS Workbench对称分析进阶:手把手教你用Pre-Meshed Cyclic Region处理外部导入的复杂网格模型

本文详细介绍了ANSYS Workbench中Pre-Meshed Cyclic Region功能在处理外部导入复杂网格模型时的应用。通过循环对称分析技术,可显著减少计算资源消耗,特别适用于叶轮机械、齿轮组等周期性结构分析。文章深入解析了该功能的底层逻辑,并提供了从NASTRAN文件导入的离心压缩机叶轮案例,帮助工程师克服网格匹配难题。

weixin_28630185的博客 314

把数字化转型真正落到组织里:读懂 SAP 的 OCM 六维框架

摘要: SAP的变革管理框架(OCM)强调数字化转型不仅是技术任务,更需关注组织与人的适应性。OCM包含六大维度:变革战略(明确方向与风险)、变革领导力(统一关键管理者行动)、变革沟通(分层传递信息)、变革实现(细化岗位级影响)、变革赋能(按角色设计培训)和变革有效性(持续评估)。该框架贯穿项目全周期,尤其在云项目中,需从早期规划变革策略,避免后期高代价调整。OCM的核心是将系统设计转化为组织语言,确保业务真正采纳新方式运作。

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 老大:我去,你还不会用 this 关键字?
下一篇: 不吹不黑,逛GitHub没看过这10个开源项目,绝对血亏
JavaShark
博客等级 码龄4年 184粉丝 438原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值