【发布时间】:2012-12-04 11:15:29
【问题描述】:
我有一个大小约为 300mb 的文件。我想逐行读取内容,然后将其添加到 ArrayList 中。所以我创建了一个数组列表 a1 的对象,然后使用 BufferedReader 读取文件,之后当我将文件中的行添加到 ArrayList 中时,它在线程“main” java.lang.OutOfMemoryError: Java heap space 中给出错误异常。
请告诉我应该如何解决这个问题。
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
FileReader file = new FileReader(
"/home/dmdd/Desktop/AsiaData/RawData/AllupperairVcomponent.txt");
ArrayList a1 = new ArrayList();
BufferedReader br = new BufferedReader(file);
String line = "";
while ((line = br.readLine()) != null) {
a1.add(line);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
【问题讨论】:
-
不想将 300MB 的数据放入内存中?或者,如果您确实需要,请使用
-Xmx标志增加允许的最大java(堆)内存。 -
如果您没有足够的内存来加载它,您将需要逐步处理数据。您预计 300 MB 将使用大约 800 MB 的内存,因为您的 ArrayList 和 Strings 有开销并且每个字符使用两个字节。
标签: java