MST

星途 面试题库

面试题:Java中内存泄漏的常见原因有哪些

请列举至少3种Java内存泄漏的常见原因,并简要说明每种原因是如何导致内存泄漏的。
33.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  • 静态集合类使用不当
    • 例如使用static List来保存对象引用。静态成员的生命周期与应用程序相同,若不断向该List添加对象,而没有相应移除,即使这些对象在程序其他部分不再使用,由于静态List持有其引用,垃圾回收器无法回收这些对象,从而导致内存泄漏。
  • 监听器未正确释放
    • 若在代码中注册了监听器,如EventListener,但在对象不再使用时没有注销监听器。被监听对象会一直持有对监听器对象的引用,使得监听器对象无法被垃圾回收,造成内存泄漏。
  • 数据库连接未关闭
    • 当从数据库获取连接(如Connection对象)后,如果在使用完毕没有调用close()方法关闭连接。这个连接对象会一直占用内存,且数据库资源也不会被释放。随着不断获取新连接而不关闭旧连接,内存占用会持续增加,最终导致内存泄漏。
  • 内部类持有外部类引用
    • 非静态内部类会隐式持有外部类的引用。如果内部类对象的生命周期比外部类对象长,例如在内部类中启动一个长时间运行的线程,当外部类对象不再被使用,但由于内部类持有其引用,外部类对象无法被垃圾回收,导致内存泄漏。