news 2026/4/23 11:19:19

Java 内存泄漏原因(长生命周期的对象持有短生命周期对象的引用、未正确关闭资源等)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 内存泄漏原因(长生命周期的对象持有短生命周期对象的引用、未正确关闭资源等)

Java 内存泄漏原因

  1. 长生命周期的对象持有短生命周期对象的引用:例如,静态集合不断添加对象而不清理
privatestaticfinalList<byte[]>cache=newArrayList<>();voidadd(){cache.add(newbyte[1024*1024]);}
  1. 未正确关闭资源:例如,数据库连接、文件流、网络连接未关闭
FileInputStreamfileInputStream=null;try{fileInputStream=newFileInputStream("target.txt");}catch(IOExceptione){e.printStackTrace();}
  1. 内部类持有外部类引用:非静态内部类持有外部类实例,若内部类生命周期更长,会导致外部类无法释放
publicclassOuter{privateStringvalue="Outer";classInner{voidprint(){System.out.println(value);}@Overrideprotectedvoidfinalize()throwsThrowable{System.out.println("Inner 对象被回收");super.finalize();}}@Overrideprotectedvoidfinalize()throwsThrowable{System.out.println("Outer 对象被回收");super.finalize();}}
publicclassTest{publicstaticvoidmain(String[]args){Outerouter=newOuter();Outer.Innerinner=outer.newInner();inner.print();System.out.println("----- outer 被设置为 null");outer=null;System.gc();try{Thread.sleep(10*1000);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println("----- inner 被设置为 null");inner=null;System.gc();try{Thread.sleep(10*1000);}catch(InterruptedExceptione){e.printStackTrace();}}}
# 输出结果 Outer ----- outer 被设置为 null ----- inner 被设置为 null Inner 对象被回收 Outer 对象被回收
  1. 不合理的作用域:将局部变量提升为静态变量,意外延长对象生命周期

  2. 监听器或回调未注销:注册了监听器或回调,但是缺少移除方法

  3. ThreadLocal 使用不当:例如,线程池的线程复用时,ThreadLocal 未及时调用 remove 方法,导致数据残留

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:54:04

运维效率翻倍!服务器监控告警 + 内网穿透,异地管理超省心

Prometheus、node_exporter、Alertmanager 是一套互补的服务器监控告警工具&#xff1a;Prometheus 作为核心可实时抓取 CPU、内存、磁盘等服务器指标&#xff0c;支持自定义告警规则&#xff1b;node_exporter 轻量部署在服务器上&#xff0c;负责采集硬件状态数据并提供给 Pr…

作者头像 李华
网站建设 2026/4/17 13:16:35

一文看懂伦敦金震荡缘由:美元地缘与获利盘三重影响

2026 年 2 月以来&#xff0c;伦敦金市场始终深陷震荡格局&#xff0c;截至 2 月 9 日&#xff0c;伦敦金现最新报价 5010.52 美元 / 盎司&#xff0c;日内微跌 0.49%&#xff0c;近期价格在 4968-5044 美元 / 盎司的区间内反复拉锯&#xff0c;既无单边上涨的动力&#xff0c;…

作者头像 李华
网站建设 2026/4/21 17:09:17

【收藏】SpringAI+Qwen3-8B+BGE构建本地知识库,代码已开源,可直接复用

本文详细介绍了使用SpringAIQwen3-8Bbge-large-zh-v1.5Milvus构建本地知识库系统的完整流程&#xff0c;包括环境准备、模型配置、依赖设置、数据加载和聊天接口实现。作者提供了完整的配置文件和Java代码&#xff0c;基于三国演义数据集实现了一个向量检索增强的知识问答系统&…

作者头像 李华
网站建设 2026/4/15 23:16:11

代购一个域名需要多少钱?

不少用户在购买心仪域名时&#xff0c;发现域名已被注册&#xff0c;或者挂在国外平台上&#xff0c;这时就会产生一个常见问题&#xff1a;代购一个域名需要多少钱&#xff1f;实际上&#xff0c;域名代购的费用并不是一个固定数字&#xff0c;而是由域名价格、代购服务费、交…

作者头像 李华
网站建设 2026/4/20 3:35:10

【Git】全面认识Git lfs

【Git】全面认识Git lfs 文章目录 【Git】全面认识Git lfs01 什么是git lfs?02 Git vs Git lfs2.1 git 场景2.2 git lfs 场景 03 Git lfs实操3.1 下载和安装Git lfs3.1.1 下载3.1.2 安装3.1.3 验证安装是否成功 3.2 配置Git Lfs 04 总结 我们经常在使用 hugging face上模型和…

作者头像 李华