我刚刚参加了一次面试,别人问我Java是否可能存在内存泄漏问题。我不知道答案。所以我想知道:
- 有哪些情况下会发生内存泄漏?
- 能否给出一个内存泄漏的例子?
- 在Java使用垃圾回收机制的情况下,是否仍然可能发生内存泄漏?
我刚刚参加了一次面试,别人问我Java是否可能存在内存泄漏问题。我不知道答案。所以我想知道:
内存泄漏(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