Я работаю над программой на Java, которая имеет целью проанализировать ее определенными способами.Память Java/количество записей ограничено?
В один момент мне нужно добавить определенные значения в зависимости от 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 работает нормально. Но я столкнулся со следующей проблемой: После ~ 65536-й строки некоторые из данных ошибочны на один шаг.
Я уверен, что это имеет какое-то отношение к переменным ограничениям, но изменение числа на Long не изменило ситуацию. После отладки кода я узнал, что проблема уже существует в Datastructure, поэтому она не имеет ничего общего с записью данных.
Я работаю над 64-разрядной машиной с 64-разрядной Java.
У кого-нибудь есть идея, почему он продолжает возиться с линиями?
Sry я имел в виду долго, а не плавать. Каковы пределы списков? Может ли это также быть возможной ошибкой? – Xlaech
@NicolasAntor: * «Возможно ли это быть возможной ошибкой?» * ... Платформа Java постоянно разрабатывается, тестируется и оптимизируется уже более 15 лет. Очень маловероятно, что проблема, с которой вы сталкиваетесь, связана с особенным или ошибочным поведением на языке. – scottb
Вы, наверное, не поняли мой вопрос. Конечно, я не обвиняю JVM в каких-либо проблемах. Но Спецификация может просто ограничить размер списков другими структурами данных, как раз то, как они ограничивают числа. – Xlaech