是这些代码导致java中的内存泄漏?

时间:2011-10-18 03:24:54

标签: java

    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中的内存泄漏,为什么?

如果两者都不会导致内存泄漏,我怎么能导致内存泄漏〜(我想要一些代码)

3 个答案:

答案 0 :(得分:4)

我认为上面给出的代码中没有发生任何内存泄漏。即使您将s设置为null,“String”对象仍然由ArrayList项引用。因此,循环结束后,这些字符串对象仍然具有活动引用。

通过静态对象引用,Java中仍然存在内存泄漏。请参阅link

答案 1 :(得分:2)

这两种情况都不会导致内存泄漏,并且所有对象都会自动在代码块的末尾释放。

答案 2 :(得分:0)

两个示例都没有内存泄漏。在Java中,不值得将变量显式设置为null只是为了帮助垃圾收集器输出一点。

请注意的情况,需要将对大对象(比如在缓存中) do 的长期引用设置为null,以避免无限制的内存增长(泄漏) )。