0

鉴于此代码段

def doSomething() = {

    val associations : HashMap[Int, Int] = function_that_create_a_hashmap
    println("something")
}

何时doSomething终止变量associations被释放?我应该调用一些析构函数(.clear在这种情况下可能是)还是该操作没有用?

4

3 回答 3

7

这不是必需的 - 如果您的应用程序不再引用HashMap,那么它将在将来的某个时候自动被垃圾收集。

如果你真的有一个巨大的哈希映射,你想摆脱它以避免它的内存消耗在doSomething完成后触发 GC 周期,你可以调用System.gc(),但这通常既不需要也不是推荐的做法。

于 2013-04-08T17:16:14.327 回答
3

调用.clearaHashMap不会将其从内存中删除;它只是清除它预先存在的映射,因此该对象仍将存在于内存中。

由于 Scala 在 JVM 上运行,我想它会在未来的某个时候被垃圾收集器收集(假设没有对 的现有引用associations)。JVM 管理自己的内存,从而将程序员从手动管理内存的负担中解放出来。

于 2013-04-08T17:05:24.767 回答
2

associations当创建它的范围不再存在时(当给定的调用返回时)绑定不再存在doSomething。这将删除一个对 的引用HashMap,一旦没有,该值就是垃圾,并且在未来的某个未指定时间(可能永远不会/不会在 JVM 退出之前)进行回收。

于 2013-04-08T18:21:38.457 回答