Java内存/条目数限制?

时间:2015-08-19 18:27:11

标签: java list memory max

我正在开发一个Java程序,其目的是以特定方式解析它。

在某一点上,我需要根据过去n(例如)行中的alorithem添加某些值:

private void eFSF(PFCC pfCC, csvReader reader) {
        List<List<String>> fileDataList;
        reader.changeModulo(1);
        fileDataList = reader.parseToList();
        HashMap<Long, List<String>> hashedList = new HashMap<>();

        long rowCnt = 0L;
        for (List<String> list : fileDataList) {
            hashedList.put(rowCnt, list);
            rowCnt++;
        }

        AWI wI = getWI(pfChainContext, fileDataList);
        hashedList.get(0L).add(setFeatureHeader());

        //iterate over without header
        long iterCnt = 1L;
        long moduloCnt = 0L;
        LinkedList<Long> lastLines = new LinkedList<>();
        for (Long line : hashedList.keySet()) {
            if (line == 0L)
                continue;

            // check measure start, first measurement
            if (hashedList.get(line).get(1).equals("0")) {
                moduloCnt = 0L;
            }

            if( moduloCnt % pfChainContext.getEsize() == 0 || pfChainContext.size() == 1){
                if (lastLines.size() != 0) { //prob first line
                    moduloTrigger(hashedList, wIter, lastLines);

                    //clean Data
                    lastLines.clear();
                    wIter.clear();
                }
            }

            wIter.addLine(hashedList.get(line));
            lastLines.add(iterCnt);
            moduloCnt++;
            iterCnt++;
        }

        // if some "hangover" lines exist:
        if (lastLines.size() != 0) {
            moduloTrigger(hashedList, wIter, lastLines);
        }

        //write File Back
        ...
    }

private void moduloTrigger(HashMap<Long, List<String>> fileDataList, AWI wIter, LinkedList<Long> lastLines) {
    fileDataList.get(lastLines.getFirst()).add((String)wIter.getDFCW());

    //fill with zeros
    for (Long i : lastLines.subList(1, lastLines.size()))
        fileDataList.get(i).add("0");
}

一般情况下,algorithem工作正常。但我遇到以下问题: 在~65536th Line之后,一些数据错误一步。

我很确定这与变量限制有关,但将数字更改为Long并没有改变这种情况。 在发现代码后我发现,问题已存在于数据结构中,因此它与写回数据无关。

我正在使用64位Java的64位计算机。

有没有人知道他为什么一直搞乱这些台词?

1 个答案:

答案 0 :(得分:1)

65536是无法表示为Java char的最小值。所有其他类型都有较小的限制(byte为127,short为32767)或显着更大。

  • byte已签署8b
  • short已签署16b
  • char是16b unsigned
  • int已签署32b
  • long已签署64b
  • float是32b签名浮动,所以23b尾数
  • double是64b签名浮动,所以52b尾数
  

但将数字更改为Float

将积分类型更改为Float不会让您将其更改为更大的整数类型。

  

我正在使用64位Java的64位计算机。

这会影响可寻址内存的数量和对象引用所消耗的内存量,但不会影响Java中数字基元的位宽。