Java 中可能存在内存泄漏吗?

amr*_*ngh 7 java garbage-collection memory-leaks

刚刚面试,被问到Java是否可能出现内存泄漏。我不知道答案。所以我想知道:

  • 怎么可能呢?
  • 可以举个什么例子吗?
  • Java使用垃圾回收还可以吗?

Mur*_*nik 4

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

考虑以下[诚然是人为的]示例:

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? ");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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