Java 运行 大变量内存不足?
Java running out of memory for big variable?
我有一个大约 32000 行的庞大文件。我正在对其 Java 中的内容进行一些操作,因此我创建了一个更小的压缩文件来测试我的程序。它工作正常,但是当我使用实际文件(较大的文件,32000 行)时,它爆炸了,说:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at translator.MainLinkedHashMap.createLinkedHashMapFromString(MainLinkedHashMap.java:100)
at translator.MainLinkedHashMap.main(MainLinkedHashMap.java:25)
请注意 ArrayIndexOutOfBoundsException > 1。
我一直在调试,我看到我存储文件行的 LinkedHashMap 在调试器中有 30400 行而不是 32000 行。
这是否表示 Java 运行 内存不足? (文件本身不大,2M,但是行很多。)
谢谢。
更新:这是代码:
private static LinkedHashMap<String, String> createLinkedHashMapFromString(String rawString) {
LinkedHashMap<String, String> resultMap = new LinkedHashMap<String, String>();
String [] values = rawString.split(",");
for (int i = 0; i < values.length; i++) {
values[i] = values[i].trim();
}
String [] pair = null;
for (String value : values) {
pair = value.split("=");
resultMap.put(pair[0], pair[1]);
}
return resultMap;
}
我不知道你文件的内容,但这个块中 100% 抛出了异常
for (String value : values) {
pair = value.split("=");
resultMap.put(pair[0], pair[1]);
}
行resultMap.put(pair[0], pair[1]);
简单地说,String#spit
的结果只有 1 个元素长度(记住数组的第一个元素索引为 0),这就是你得到错误的原因。我敢打赌,并非您文件中的所有 "lines" 都符合您的预期。
我有一个大约 32000 行的庞大文件。我正在对其 Java 中的内容进行一些操作,因此我创建了一个更小的压缩文件来测试我的程序。它工作正常,但是当我使用实际文件(较大的文件,32000 行)时,它爆炸了,说:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at translator.MainLinkedHashMap.createLinkedHashMapFromString(MainLinkedHashMap.java:100)
at translator.MainLinkedHashMap.main(MainLinkedHashMap.java:25)
请注意 ArrayIndexOutOfBoundsException > 1。
我一直在调试,我看到我存储文件行的 LinkedHashMap 在调试器中有 30400 行而不是 32000 行。
这是否表示 Java 运行 内存不足? (文件本身不大,2M,但是行很多。)
谢谢。
更新:这是代码:
private static LinkedHashMap<String, String> createLinkedHashMapFromString(String rawString) {
LinkedHashMap<String, String> resultMap = new LinkedHashMap<String, String>();
String [] values = rawString.split(",");
for (int i = 0; i < values.length; i++) {
values[i] = values[i].trim();
}
String [] pair = null;
for (String value : values) {
pair = value.split("=");
resultMap.put(pair[0], pair[1]);
}
return resultMap;
}
我不知道你文件的内容,但这个块中 100% 抛出了异常
for (String value : values) {
pair = value.split("=");
resultMap.put(pair[0], pair[1]);
}
行resultMap.put(pair[0], pair[1]);
简单地说,String#spit
的结果只有 1 个元素长度(记住数组的第一个元素索引为 0),这就是你得到错误的原因。我敢打赌,并非您文件中的所有 "lines" 都符合您的预期。