是变量去分配,当他们走出去的范围
问题描述:
鉴于此代码段是变量去分配,当他们走出去的范围
def doSomething() = {
val associations : HashMap[Int, Int] = function_that_create_a_hashmap
println("something")
}
当doSomething
终止是可变associations
去分配呢?我是否应该调用一些析构函数(在这种情况下可能是.clear
)还是该操作没有用?
答
在HashMap
上调用.clear
不会将其从内存中移除;它只是清除了先前存在的映射,因此该对象仍将存在于内存中。
由于斯卡拉在JVM上运行,我会想象它会被垃圾收集器在未来的某一时刻得到收集(假设是associations
没有现成的引用)。 JVM管理自己的内存,从而释放程序员手动管理内存的负担。
答
这不是必需的 - 如果您的应用程序没有更多的参考HashMap
,那么它将在未来的某个时间点自动收集垃圾。
如果你真的有,你想摆脱掉,以避免以后doSomething
完成它的内存消耗触发GC周期一个巨大的哈希表,你可以叫System.gc()
,但这是一般的非必要也不值得推荐的做法。
答
当其创建范围不再存在时(当对doSomething
的给定调用返回时),绑定associations
不再存在。这会删除对HashMap
的一个引用,并且一旦没有剩下的内容,该值就是垃圾,将来可能会在未指定的时间回收(可能永远不会/不会在JVM退出前)。
事实上,对System.gc()的调用并不能保证您调用GC。它被视为JVM实现的建议,甚至可以完全忽略它。 – 2013-04-08 17:18:58