标签:java scala out-of-memory fileutils apache-commons
我正在尝试使用Apache Commons FileUtils.lineIterator逐行迭代1.2GB文件.但是,只要LineIterator调用hasNext(),我就会得到一个java.lang.OutOfMemoryError:Java堆空间.我已经为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,scala,out-of-memory,fileutils,apache-commons 来源: https://codeday.me/bug/20190830/1770110.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。