有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

下面的代码首先读取一个文件,然后将这些信息放入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) 个答案