【问题标题】:Java running out of memory for big variable?Java的大变量内存不足?
【发布时间】:2015-04-30 23:30:51
【问题描述】:

我有一个大约 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;
    }

【问题讨论】:

  • 不,它明确指出你的数组不够长,它的大小可能是 0 或 1,所以索引 1(你记得数组索引以 0 开头)超出了界限
  • 请输入代码...您的createLinkedHashMapFromString() 方法是做什么的?
  • @Lashane 我清楚地说它是 LinkedHashMap,而不是数组...
  • 那是您的问题:您的“对”值之一没有“=”符号。
  • 如果你的内存不足,你会得到OutOfMemoryError :)

标签: java oop exception exception-handling indexoutofboundsexception


【解决方案1】:

我不知道你文件的内容,但是这个块中 100% 抛出异常

   for (String value : values) {
        pair = value.split("=");
        resultMap.put(pair[0], pair[1]);
    }

在线resultMap.put(pair[0], pair[1]);

简单地说,String#spit 的结果只有 1 个元素长度(请记住数组的第一个元素索引为 0),这就是您收到错误的原因。我敢打赌,并非您文件中的所有“行”都符合您的预期。

【讨论】:

  • 那么你到底要在这里找什么?你得到了答案 - 不是内存错误,只是文件内容不符合你的预期。
  • @stackpepe 显然你还不知道,因为你认为它内存不足。
  • @Boann 请不要放置无助于答案的 cmets。这与 5 天前提出的问题有关吗?我不这么认为
猜你喜欢
  • 2021-09-30
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多