当前位置: 首页 > news >正文

生命周期长的集合

将对象放入静态生命周期很长的集合(如 publicstaticList<Object> list = new ArrayList<>();),即使后面不再需要,集合仍持有其引用,导致无法GC

2、未关闭的资源

连接、流等资源未调用close()方法关闭。这些资源不仅占用内存,还可能占用文件句柄(操作系统分配的唯一标识,凭它,你才能操作文件资源)、网络连接等系统资源。比如 数据库连接、文件流(FileInputStream)、Socket连接 等。

public class FileTest { public static void main(String[] args) { FileInputStream fis = null; try { fis = new FileInputStream("test.txt"); // 读取文件,未调用 fis.close() } catch (FileNotFoundException e) { e.printStackTrace(); } finally { // 未调用 fis.close() → fis 持有 Native 引用,无法回收 } } }

3、ThreadLocal 使用不当

将对象存入ThreadLocal后,未在后续调用remove()清理。若线程来自线程池(会复用),其 ThreadLocalMap 中的值会一直存活。

public class ThreadLocalTest { private static ThreadLocal<User> userThreadLocal = new ThreadLocal<>(); public static void main(String[] args) { // 线程池(核心线程长期存活) TThreadPoolExecutor executor = new ThreadPoolExecutor( 2, 4, 10, TimeUnit.SECONDS, new ArrayBlockingQueue<>(100), new ThreadFactoryBuilder().setNameFormat("my-thread-pool-%d").setDaemon(false).setPriority(Thread.NORM_PRIORITY).build(), new ThreadPoolExecutor.AbortPolicy() ); executor.submit(() -> { User user = new User("李四", 30); userThreadLocal.set(user); // 存储到 ThreadLocal // 业务执行完毕,未调用 remove() // 核心线程不会销毁,ThreadLocal 仍持有 user 引用 }); } }

ps:未进行remove(),还可能会导致ThreadLocal取值串门。

4、内部类与外部类引用

非静态内部类(或匿名类)会隐式持有外部类的引用。如果内部类实例生命周期更长(如被缓存或另一个线程引用),会阻止外部类被回收。

public class OuterClass { private byte[] bigData = new byte[1024 * 1024 * 10]; // 10MB 大对象 // 非静态内部类 class InnerClass { // 内部类隐式持有 OuterClass 引用 } public InnerClass createInner() { return new InnerClass(); } public static void main(String[] args) { OuterClass outer = new OuterClass(); InnerClass inner = outer.createInner(); // 置空外部类引用,但 inner 仍持有 outer 引用 outer = null; // 若 inner 被静态变量/线程长期持有 → outer 对象(含 bigData)无法回收 } }

5、 监听器与回调

http://www.jsqmd.com/news/1097060/

相关文章:

  • test-time scaling的工程化落地:推理阶段投入更多计算换取精度的成本收益分析
  • Windows系统文件advapi32.dll丢失找不到问题解决
  • 告别卡顿!用noVNC+Node.js在Windows上搭建流畅的Web版远程桌面(保姆级避坑指南)
  • 互联网大厂 Java 求职面试:核心技术与业务场景的深度探讨
  • 每年千亿补贴留不住乘客,公交票价改革根本不是涨价游戏
  • 2026年6月27日科技热点新闻
  • Windows系统文件adsldpc.dll丢失找不到问题解决
  • InDesign 2026安装包免费下载及详细安装教程
  • 网络布线中最常见、也是最容易被忽视的配件——配线架
  • 干货合集:2026年真正好用的专业AI论文工具
  • 3步掌握Windows高效安装APK:APK Installer实战指南
  • DeepSeek降价潮:中小商家如何用AI工作流,实现内容获客自动化?
  • AutoDL租卡后别急着跑模型!先花5分钟搞定Xshell和Xftp连接,省下GPU冤枉钱
  • 窑炉温度测不准?我见过最离谱的错误,是工程师把红外枪当成了“万能方案“
  • 「展会预告」马路科技亮相上海国际压铸暨有色铸造展 (7/15-17)
  • 孤能子视角:观察符
  • 华为AC+AP组网实战:手把手教你配置隧道转发,搞定办公与访客Wi-Fi隔离
  • 如何用Keep开源AIOps平台5步终结警报疲劳:终极智能运维指南
  • 00-2 Jupyter操作文档
  • 华硕笔记本终极轻量控制工具GHelper:3分钟告别系统臃肿
  • Windows系统文件advapi32res.dll丢失找不到问题解决
  • TEL TTLD30-11 5880-000029-V2印刷电路板
  • 干细胞:生命科学的潜力新探索
  • ComfyUI-Impact-Pack终极指南:如何用5个核心功能提升AI绘画质量
  • Flutter Map 核心操作与高效遍历实战指南
  • Python MQTT实战:从paho-mqtt基础连接到高级回调与QoS策略的完整指南
  • 449. Java 正则表达式 - 其他实用方法
  • Android 7系统日志(一):全景图与架构概览
  • CCRC-CSERE网络安全应急响应工程师认证信息整理
  • Fast-GitHub:国内开发者告别GitHub龟速下载的终极解决方案