【问题标题】:Reading 2 million record from text file and add them to arraylist从文本文件中读取 200 万条记录并将它们添加到 arraylist
【发布时间】:2018-10-12 10:12:32
【问题描述】:

我正在尝试从大文本文件中读取数据并将它们添加到数组列表中,但它给了我以下错误:-

线程“主”java.lang.OutOfMemoryError 中的异常:超出 GC 开销限制。

我的代码:

List<Book> books= new ArrayList<>();
try {
    BufferedReader br = new BufferedReader(new FileReader(filePath));
    String fileRead = null;
    Book book = null;
    while((fileRead = br.readLine()) != null) {
        if(fileRead.startsWith("#index")) {
            book = new Book();
            book.index = fileRead.substring(6); 
            books.add(book);
        }

【问题讨论】:

  • 你可以试试用nio包阅读吗?
  • 你有任何链接可以指导我如何在我的代码中使用 nio 包吗?
  • 如果您知道给定文本文件中记录的 max 个很好的估计值,则可以将其作为构造函数参数传递给 ArrayList 构造函数。这将确保为它分配了足够的空间来容纳它们,这样它就不必进行过多的重新分配和多次移动。
  • @gparyani 我试过了,但没用,花了很多时间而且从未终止

标签: java


【解决方案1】:

这是因为为 JVM 保留的内存无法保留那么多内存对象。根据您的 RAM,您可能正在尝试执行不可能的操作。您的可用 RAM 量决定了您可以在内存中保存多少 Book Objects。尝试添加内存限制并从命令行运行。

java -Xmx2000m -Xms2000m ....

【讨论】:

  • 花了很多时间,从未终止
猜你喜欢
  • 1970-01-01
  • 2019-04-12
  • 2018-02-26
  • 1970-01-01
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
相关资源
最近更新 更多