【发布时间】:2013-07-26 19:57:42
【问题描述】:
如果我在我的类中定义一个static 变量,如下所示:
class MyClass
{
private static List<String> list = new ArrayList<String>();
}
list 会导致内存泄漏吗?如果是,那么如何?
【问题讨论】:
-
问你一个问题。为什么是静态的?
-
@AndrewThompson 我刚刚遇到stackoverflow.com/a/6548647 的回答。第一点是告诉它可能导致内存泄漏。但我无法理解。所以我在这里问。
-
@Mac 如果列表不断增长,您将保留对您可能不需要的对象的引用,并且它们不会被垃圾收集。从这个意义上说,这是一个内存泄漏。您仍然可以通过清除列表来修复它。
-
@SotiriosDelimanolis 但无论您指定什么原因,也可以使用非静态列表来实现..
-
@Mac 这发生的频率要低得多。对于非静态变量,一旦实例超出范围,列表也会如此,因此它可以被垃圾收集。使用静态变量,它们永远不会超出范围(除非你
null它,你不能在final上这样做),因为它们链接到类。
标签: java memory-leaks static class-variables