как показано ниже, чтобы прочитать каждую строку и выполнить конкатенацию на основе списка listValues.Использование одиночного StringBuilder - throws OutofmemeoryException
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
InputStream in = new FileInputStream(new File(file));
br = new BufferedReader(new InputStreamReader(in), 102400);
for (String input; (input= br.readLine()) != null;) {
for (int i = 0; i < listValues.size(); i++) {
sb.append(input.substring(1, 5));
}
map.put(sb.toString(), someOtherValue);
sb.delete(0, sb.length());
}
Использование одного и того же StringBuilder для каждой итерации путем установки удаления содержимого каждый раз. Все еще бросает
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.lang.String.substring(Unknown Source)
Какая ошибка я сделал?
Редактировать: Я исправился согласно Предложение Bathsheba. Но теперь бросает,
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Unknown Source)
at java.lang.String.<init>(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
на for (String input; (input= br.readLine()) != null;)
Что сейчас проблема?
возможно дубликат [вопрос утечки памяти об использовании метода Java подстроки] (HTTP: // StackOverflow. com/questions/17359047/memory-leak-issue-on-use-java-substring-method) – Smutje
'input.substring (1, 5)' является виновником ... В более старых версиях Java массив размера исходного String создается для подстроки .. в основном, слишком много объектов. проверьте [this] (http://stackoverflow.com/questions/14161050/java-string-substring-method-potential-memory-leak) – TheLostMind
@TheLostMind К сожалению! мог бы посоветовать мне, как с этим справиться. Я повторяю те же сотни миллионов раз – Harbinger