鉴于此代码段
def doSomething() = {
val associations : HashMap[Int, Int] = function_that_create_a_hashmap
println("something")
}
何时doSomething
终止变量associations
被释放?我应该调用一些析构函数(.clear
在这种情况下可能是)还是该操作没有用?
鉴于此代码段
def doSomething() = {
val associations : HashMap[Int, Int] = function_that_create_a_hashmap
println("something")
}
何时doSomething
终止变量associations
被释放?我应该调用一些析构函数(.clear
在这种情况下可能是)还是该操作没有用?
这不是必需的 - 如果您的应用程序不再引用HashMap
,那么它将在将来的某个时候自动被垃圾收集。
如果你真的有一个巨大的哈希映射,你想摆脱它以避免它的内存消耗在doSomething
完成后触发 GC 周期,你可以调用System.gc()
,但这通常既不需要也不是推荐的做法。
调用.clear
aHashMap
不会将其从内存中删除;它只是清除它预先存在的映射,因此该对象仍将存在于内存中。
由于 Scala 在 JVM 上运行,我想它会在未来的某个时候被垃圾收集器收集(假设没有对 的现有引用associations
)。JVM 管理自己的内存,从而将程序员从手动管理内存的负担中解放出来。
associations
当创建它的范围不再存在时(当给定的调用返回时)绑定不再存在doSomething
。这将删除一个对 的引用HashMap
,一旦没有,该值就是垃圾,并且在未来的某个未指定时间(可能永远不会/不会在 JVM 退出之前)进行回收。