我正在尝试读取文件并将共享相同第一个令牌(readId)的行保存在一组(字符串)中。每个集合都是我的哈希图的一部分 >。
我已经将堆增加到 32 giga,也从 string.split 移动到 StringTokenizer,但我仍然遇到此错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:2694)
at java.lang.String.<init>(String.java:203)
at java.lang.String.substring(String.java:1913)
at java.util.StringTokenizer.nextToken(StringTokenizer.java:352)
at java.util.StringTokenizer.nextElement(StringTokenizer.java:407)
at Simple1_BootStrap.createMapSet(Simple1_BootStrap.java:68)
at Simple1_BootStrap.main(Simple1_BootStrap.java:206)
以前,“内存不足错误”是由这一行生成的:
Set<String> s =new TreeSet<String>();
产生错误的代码片段是:
Map<String,Set<String>> map2 = new HashMap<String,Set<String>>();
try{
BufferedReader br = new BufferedReader(new FileReader(filename));
String strLine;
String readId;
while ((strLine = br.readLine()) != null) {
alignment ++;
StringTokenizer stringTokenizer = new StringTokenizer(strLine);
readId = stringTokenizer.nextElement().toString();
if(map2.containsKey(readId)) {
Set<String> s = map2.get(readId);
s.add(strLine);
map2.put(readId, s);
}
else {
Set<String> s =new TreeSet<String>();
s.add(strLine);
map2.put(readId, s);
}
}
br.close();
}catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
我将这些行放在一个集合中,因为我需要在我的哈希图中随机选择条目并读取关联的集合以创建一个类似于输入文件的文件。
有人可以建议另一种方法来避免“内存不足错误”吗?
谢谢你。