Java中是否可能存在内存泄漏?

7

我刚刚参加了一次面试,别人问我Java是否可能存在内存泄漏问题。我不知道答案。所以我想知道:

  • 有哪些情况下会发生内存泄漏?
  • 能否给出一个内存泄漏的例子?
  • 在Java使用垃圾回收机制的情况下,是否仍然可能发生内存泄漏?
1个回答

4

内存泄漏(Memory leak),广义上指的是任何你继续保留已分配但实际上不再需要、也不再打算使用的内存的情况。

考虑以下[尽管有些人为制造的]例子:

public class LeakingClass {
    private static final List<String> LEAK = new ArrayList<>();

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("What is your name? ");
        while (in.hasNext()) {
            name = in.next();
            System.out.println("Hi " + name);
            LEAK.add(name);
            System.out.println("What is your name? ");
        }
    }
}
< p > LEAK列表在每次迭代中都会增长,但没有办法释放它,而它从未被使用。这是一种内存泄漏。


为什么需要用户输入?在while(true)内部添加 LEAK.add("str"); 就足够了。 - Sharon Ben Asher
1
@sharonbn 确实。这个例子似乎有点可接受,但是归根结底,它并没有什么特别之处,可能会有无数不同的例子。 - Mureinik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接