Я использую ehcache для обработки больших файлов и избегаю OOM путем переполнения на диск.
У меня есть файл с 1 миллионом строк. В каждой строке может быть общее слово с другими, и мне нужно сгруппировать их по определенным словам.
Поэтому для этого я перебираю каждую строку и добавляю элемент в кеш.
Element("key=word",value=ArrayList(строка, содержащая слово)).
Если текущая строка содержит одно из этих ключевых слов, на каждой итерации я получаю элемент из кеша, добавляю строку в этот ArrayList и снова помещаю элемент в кеш, то есть в конце итерация, которую я мог бы иметь в кеше, как показано ниже:
Element("key=word1",value=ArrayList(строка 1, содержащая слово1, строка 2 содержащий слово1).
Element("key=word2",value=ArrayList(строка 1 содержит слово2, строка 2 содержит слово2, строка 3 содержит слово2).
.....
Element("key=wordn",value=ArrayList(строка 1 содержит слово n, строка 2 содержит слово n...строка n содержит слово n).
Но это требует много памяти и выполняется много вызовов GC, что приводит к огромному времени обработки (часы).
Я использую стратегию сохранения LOCALTEMPSWAP для переполнения на диск при достижении порога памяти, но она переполняется при каждом вызове put.
Я читал в документации, что когда вы работаете с изменяемыми объектами, если вы установите copyOnRead=false, вам не нужно вносить изменения при изменении изменяемого объекта, в моем случае изменяемым объектом является ArrayList. Если я просто добавляю массив, не выполняя put для этого элемента, он терпит неудачу из-за нехватки памяти, потому что расчет put и памяти выполняется только тогда, когда я добавляю первый элемент, специфичный для слова. (Если у меня 12 слов и 1 миллион строк, put будет вызываться только 12 раз.)
https://www.ehcache.org/documentation/2.8/get -started/consistency-options.html#propagation-of-modified-data
Есть идеи, как можно повысить производительность?
Спасибо
p>
Мне нужно найти способ сделать это за считанные минуты и избежать ООМ.
Подробнее здесь: https://stackoverflow.com/questions/785 ... emory-used
EhCache — изменяемые элементы — используется слишком много памяти ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение