Java中是否存在内存泄漏?

Are Memory Leaks Possible in Java?

本问题已经有最佳答案,请猛点这里访问。

我刚刚接受了一次采访,有人问我是否有可能在Java中内存泄漏。我不知道答案。所以我想知道:

  • 怎么可能?
  • 举个例子吧?
  • 即使Java使用垃圾回收,它仍然是可能的吗?

从广义上讲,内存泄漏是指您继续保留已分配的不再需要也不再打算使用的内存的任何情况。

考虑以下[公认是人为的]例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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?");
        }
    }
}

LEAK列表在每次迭代中都会增长,并且没有办法释放它,但是它从未被使用过。这是一个漏洞。