java如何防止Scala代码中的内存泄漏?
下面的代码首先读取一个文件,然后将这些信息放入HashMap
(indexCategoryVectors
)中。HashMap
包含一个String
(键)和一个Long
(值)。代码使用Long
值来访问另一个文件的特定位置,该文件使用RandomAccessFile
通过最后一个文件中读取的信息和一些操作,代码将新信息写入另一个文件(filename4
)。积累信息的唯一变量是缓冲区(var buffer = new ArrayBuffer[Map[Int, Double]]()
),但在每次交互之后,缓冲区都会被清除(buffer.clear
)
foreach
命令应该运行超过400万次,我意识到内存中存在累积。我对代码进行了一百万次交互测试,代码使用了超过32GB的内存。我不知道原因,可能是关于垃圾收集或者JVM中的其他任何东西。有人知道我能做些什么来防止内存泄漏吗
def main(args: Array[String]): Unit = {
val indexCategoryVectors = getIndexCategoryVectors("filename1")
val uriCategories = getMappingURICategories("filename2")
val raf = new RandomAccessFile("filename3", "r")
var buffer = new ArrayBuffer[Map[Int, Double]]()
// Through each hashmap key.
uriCategories.foreach(uri => {
var emptyInterpretation = true
uri._2.foreach(categoria => {
val position = indexCategoryVectors.get(categoria)
// go to position
raf.seek(position.get)
var vectorSpace = parserVector(raf.readLine)
buffer += vectorSpace
//write the information of buffer in file
writeInformation("filename4")
buffer.clear
}
})
})
println("Success!")
}
共 (0) 个答案