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