【发布时间】:2015-05-11 22:03:14
【问题描述】:
即使有 7G 的堆空间,这也会耗尽内存。
import scala.collection.mutable.Set
class Foo() {
val anEmptySet: Set[Int] = Set()
def bar(ints: Traversable[Int]): Unit = {}
override def finalize() {
bar(anEmptySet)
super.finalize()
}
}
object FooTest {
def main(args: Array[String]): Unit = {
for (i <- 0 to 100000000) {
val f = new Foo()
}
}
}
是什么导致了问题,如何避免?问题似乎是在 finalize 方法中对bar 的调用,但我不明白为什么它会泄漏内存。我知道典型的类不需要重写finalize,但在这段代码的真实版本中是必要的。
【问题讨论】:
-
Java 中也会发生这种情况:stackoverflow.com/a/8355147/2292812 你使终结器比后台线程调用它们的速度更快,因此它们堆积起来,不会被 GC 处理。
-
这是一个很好的例子。感谢分享。
标签: scala memory-leaks