EhCache — изменяемые элементы — используется слишком много памятиJAVA

Программисты JAVA общаются здесь
Anonymous
EhCache — изменяемые элементы — используется слишком много памяти

Сообщение Anonymous »

Я использую 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

Вернуться в «JAVA»