如何防止Scala代码中的内存泄漏?

时间:2017-02-21 04:04:02

标签: java scala memory memory-leaks jvm

我有以下代码,首先读取文件,然后将这些信息放在HashMapindexCategoryVectors)中。 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 个答案:

没有答案