java - 使用 Apache Commons lineIterator 时出现 OutOfMemory 错误

标签 java scala out-of-memory apache-commons fileutils

我尝试使用 Apache Commons FileUtils.lineIterator 逐行迭代一个 1.2GB 的文件。但是,一旦 LineIterator 调用 hasNext(),我就会得到一个 java.lang.OutOfMemoryError: Java heap space。我已经为 java 堆分配了 1G

我在这里做错了什么?阅读一些文档后,LineIterator 不应该从文件系统读取文件而不是将其加载到内存中吗?

请注意代码是在 Scala 中:

  val file = new java.io.File("data_export.dat")
  val it = org.apache.commons.io.FileUtils.lineIterator(file, "UTF-8")
  var successCount = 0L
  var totalCount = 0L
  try {
    while ( {
      it.hasNext()
    }) {
      try {
        val legacy = parse[LegacyEvent](it.nextLine())
        BehaviorEvent(legacy)
        successCount += 1L
      } catch {
        case e: Exception => println("Parse error")
      }
      totalCount += 1
    }
  } finally {
    it.close()
  }

在此感谢您的帮助!

最佳答案

代码看起来不错。可能它没有在文件中找到一行的结尾,而是将大于 1Gb 的很长的一行读入内存。

在 Unix 中尝试 wc -l,看看你得到了多少行。

关于java - 使用 Apache Commons lineIterator 时出现 OutOfMemory 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24334549/

相关文章:

scala - 对Cats Effect IO进行认真评估并忘记行为

scala - 在 Scala 中做类似 Python 的 "import"的事情

performance - 处理大输入时 Spark 性能非常慢

java - 在 apache Camel 中压缩和解压缩大文件而不将整个文件加载到内存中

c# - 如何使用 MemoryFailPoint?

java - Android:使用 YouTube API 时应用程序存在后退点击

java - 为什么 KeyPairGenerator 返回 null?为什么条件语句不起作用?

java - Android KeyStore 系统 - 保存 key 对?

java - Intellij IDEA 内置检查代码 vs checkstyle, PMD & findbugs

java - 发生 OutOfMemoryError 时 Java 进程的行为