【发布时间】:2016-10-28 09:39:50
【问题描述】:
我刚刚接受了一次面试,有人问我在 Java 中是否可能存在内存泄漏。我不知道答案。所以我想知道:
- 怎么可能?
- 有什么例子呢?
- 即使 Java 使用垃圾回收,它仍然可能吗?
【问题讨论】:
标签: java memory-leaks garbage-collection
我刚刚接受了一次面试,有人问我在 Java 中是否可能存在内存泄漏。我不知道答案。所以我想知道:
【问题讨论】:
标签: java memory-leaks garbage-collection
从广义上讲,内存泄漏是指您继续持有您不再需要且不再打算使用的已分配内存的任何情况。
考虑以下 [诚然人为的] 示例:
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 列表在每次迭代中都会增长,无法释放它,但它从未被使用过。这是泄漏。
【讨论】:
LEAK.add("str"); 内 while(true) 就足够了