1
即使有7G的堆空間,這也會耗盡內存。這個奇怪的Scala內存泄漏的原因是什麼?
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中:http://stackoverflow.com/a/8355147/2292812你正在使終結器比後臺線程可以調用它們更快,所以它們堆積起來,不會得到GC'編輯。 –