标签:single dom i++ 删除 rgs 其他 方法 必须 on()
场景
public class dome1 {
static Set<Object> s = new HashSet(10);
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
Object o = new Object();
s.add(o);
//对象赋值位空值,理应被垃圾回收器回收,但是被集合引用,
// 但是GC-Roots 到对象之间存在引用链(可到达),
//所以不会被回收内存
o = null;
}
s.forEach(System.out::println);
}
}
HashSet<Person> set = new HashSet<>();
Person tom = new Person(1L, "Tom", 12);
System.out.println(tom.hashCode());//2613467
set.add(tom);
tom.setAge(13);//修改对象的属性后对象的hashCode发生变化
System.out.println(tom.hashCode());//2613468
System.out.println(set.remove(tom));//false remove不成功,造成内存泄漏
set.forEach(System.out::println);
System.out.println(set.add(tom));// true 添加成功,判断是否相等时验证hashCode
set.forEach(System.out::println);
3、监听器未删除
4、各种连接为关闭
5、内部类和外部模块的引用
if (true){
Person tom = new Person(1L, "Tom", 12);
singleton.getInstance().setPerson(tom);
}
System.out.println(singleton.getInstance().getPerson());
对象tom已经结束生命周期,但是被单例对象引用,不会被GC回收
在Java堆中不断的创建对象造成
大量的内存泄漏
标签:single dom i++ 删除 rgs 其他 方法 必须 on()
原文地址:https://www.cnblogs.com/mingyi123/p/9383924.html