ArrayList<Object> list = new ArrayList<Object>();
for (int i = 0; i < 10; i++) {
Object o = new Object();
list.add(o);
}
list = null;
或
ArrayList<Object> list = new ArrayList<Object>();
for (int i = 0; i < 10; i++) {
Object o = new Object();
list.add(o);
o = null;
}
哪个代码块会导致java中的内存泄漏,为什么?
如果两者都不会导致内存泄漏,我怎么能导致内存泄漏〜(我想要一些代码)
答案 0 :(得分:4)
我认为上面给出的代码中没有发生任何内存泄漏。即使您将s设置为null,“String”对象仍然由ArrayList项引用。因此,循环结束后,这些字符串对象仍然具有活动引用。
通过静态对象引用,Java中仍然存在内存泄漏。请参阅link。
答案 1 :(得分:2)
这两种情况都不会导致内存泄漏,并且所有对象都会自动在代码块的末尾释放。
答案 2 :(得分:0)
两个示例都没有内存泄漏。在Java中,不值得将变量显式设置为null只是为了帮助垃圾收集器输出一点。
请注意是的情况,需要将对大对象(比如在缓存中) do 的长期引用设置为null,以避免无限制的内存增长(泄漏) )。