我有以下代码,首先读取文件,然后将这些信息放在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!")
}