2013-04-08 22 views
0

鉴于此代码段是变量去分配,当他们走出去的范围

def doSomething() = { 

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

doSomething终止是可变associations去分配呢?我是否应该调用一些析构函数(在这种情况下可能是.clear)还是该操作没有用?

回答

3

HashMap上调用.clear不会将其从内存中移除;它只是清除了先前存在的映射,因此该对象仍将存在于内存中。

由于斯卡拉在JVM上运行,我会想象它会被垃圾收集器在未来的某一时刻得到收集(假设是associations没有现成的引用)。 JVM管理自己的内存,从而释放程序员手动管理内存的负担。

7

这不是必需的 - 如果您的应用程序没有更多的参考HashMap,那么它将在未来的某个时间点自动收集垃圾。

如果你真的有,你想摆脱掉,以避免以后doSomething完成它的内存消耗触发GC周期一个巨大的哈希表,你可以叫System.gc(),但这是一般的非必要也不值得推荐的做法。

+3

事实上,对System.gc()的调用并不能保证您调用GC。它被视为JVM实现的建议,甚至可以完全忽略它。 – 2013-04-08 17:18:58

2

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