当前位置: 首页 > 知识库问答 >
问题:

使用Apache Commons lineIterator时出现OutOfMemory错误

董俊
2023-03-14

我正在尝试使用Apache CommonsFileUtils.lineIterator逐行迭代1.2GB文件。但是,一旦LineIterator调用hasNext()我就会得到一个java.lang.OutOfMemoryError:Java堆空间。我已经将1G分配给java堆。

我在这里做错了什么?在读取了一些文档之后,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()
  }

谢谢你的帮助!

共有1个答案

孔驰
2023-03-14

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

尝试在Unix中使用wc-l,看看可以得到多少行。

 类似资料:
  • 假设N是根号,三者将创建N-1,N-2,N-3的左中右节点。 EX: 等。 我的 TreeNode 类具有以下变量: 每当我构造一个整数大于 28 的树时,我都会得到一个 OutOfMemoryError。我的递归方法是效率低下还是很自然?谢谢!

  • 问题内容: 我在具有JVM参数的生产环境(rhel 5.2 x64,oracle jre 1.7_05,tomcat 7.0.28)上运行我的应用程序: 几次之后,我得到了这样的堆栈跟踪: 期待我的探查器-一切正常(用于堆和非堆的内存占10%),我不知道问题出在哪里。 该问题每天在同一时间发生,并且与应用程序正常运行时间无关。是什么原因引起的? 编辑: 日志文件中的新输出: 但是我有足够的内存:h

  • 面向Web开发人员的Eclipse Java EE IDE。 版本:Juno Service Release 1 构建ID:20120920-0800 默认情况下,M2E不安装在此版本中,但它可以在标准更新站点中获得。 我试图在其中安装M2E,方法是查看Help-->install New Software,然后选择“Juno-http://download.eclipse.org/release

  • 它需要做的是获取用户名和密码,验证它并根据密码给出适当的输出。请帮帮我.也让我知道如果我的怀疑是正确的。另外,我听说在servlet程序中编写html代码不是一个好的做法。我还想知道如何在index.html文件中编写上面的html代码,这应该与该程序预期的行为方式相同。谢了。

  • 大约一到两周前,我就无法使用pip,因为它总是会回退以下错误: 错误:由于环境原因无法安装程序包错误:HTTPSConnectionPool(host='files.pythonhosted.org',port=443):url超过最大重试次数:/packages/1b/e5/552ba6583ab43e12b299458fea94ee23886125b8b8babc91edb03f2ba65/p

  • 编译以下使用Lombok自动生成getter和setter的类时,Checkstyle引发编译错误: 实用工具类不应具有公共或默认构造函数 当Checkstyle没有按照Checkstyle文档中指定的实用程序类定义时,为什么Checkstyle将上面的类归类为实用程序类?即只包含静态方法或字段的类。checkstyle解析的是默认源文本文件还是lombok生成的源文件?