内存泄漏场景
使用集合
集合释放掉了,但时集合中还持有某些对象的引用,造成这些引用不能被及时回收
静态属性导致内存泄漏
会导致内存泄露的一种情况就是大量使用static静态变量。在Java中,静态属性的生命周期通常伴随着应用整个生命周期(除非ClassLoader符合垃圾回收的条件)。
未关闭的资源
无论什么时候当我们创建一个连接或打开一个流,JVM都会分配内存给这些资源。比如,数据库链接、输入流和session对象。
使用finally或者try-with-resources
不当的equals方法和hashCode方法实现
没有equals方法和hashCode方法,每次都创建新的对象
外部类引用内部类
这种情况发生在非静态内部类(匿名类)中,在类初始化时,内部类总是需要外部类的一个实例。
每个非静态内部类默认都持有外部类的隐式引用。如果在应用程序中使用该内部类的对象,即使外部类使用完毕,也不会对其进行垃圾回收。
改为使用静态内部类
使用ThreadLocal
集合释放掉了,但时集合中还持有某些对象的引用,造成这些引用不能被及时回收
静态属性导致内存泄漏
会导致内存泄露的一种情况就是大量使用static静态变量。在Java中,静态属性的生命周期通常伴随着应用整个生命周期(除非ClassLoader符合垃圾回收的条件)。
未关闭的资源
无论什么时候当我们创建一个连接或打开一个流,JVM都会分配内存给这些资源。比如,数据库链接、输入流和session对象。
使用finally或者try-with-resources
不当的equals方法和hashCode方法实现
没有equals方法和hashCode方法,每次都创建新的对象
外部类引用内部类
这种情况发生在非静态内部类(匿名类)中,在类初始化时,内部类总是需要外部类的一个实例。
每个非静态内部类默认都持有外部类的隐式引用。如果在应用程序中使用该内部类的对象,即使外部类使用完毕,也不会对其进行垃圾回收。
改为使用静态内部类
使用ThreadLocal
全部评论
相关推荐
点赞 评论 收藏
分享