Как избежать нехватки памяти при построении карты из более чем 100 тысяч ключей - PullRequest
0 голосов
/ 21 декабря 2018

Я работаю над кодом в java, где я прохожу таблицу базы данных и создаю список уникальных элементов из этой таблицы с ключом, который является строковым значением (имя элемента может быть длиной до 1024 символов) иномер (длинный).Таблица может содержать 100 000 или более уникальных предметов.Код выглядит примерно так:

Map<String, long> getUniqueItems() {  
   Map<Stirng, long> map = new HashMap<>();  
   recordsItr = readDatabaseRecord();  
   while(recordItr.hasNext()) {  
       RecordItem item = recordItr.next();  
       map.put(item.getName(), item.getValue();  
   }  

   return map; 
}

Однако, если количество уникальных записей огромно, тогда, конечно, я получу нехватку памяти в приложении.Как я могу избежать выхода или памяти при построении этого.В конце, как только я получаю карту, я использую ее, чтобы перебрать ее записи и сделать что-то с каждым элементом.

Спасибо,

Арсалан

1 Ответ

0 голосов
/ 21 декабря 2018

Как отмечает @ Marco13, 100 тыс. Элементов не слишком велики для хранения в основной памяти.Но, если recordsItr является массивом, компилятору потребуются последовательных фрагментов памяти для хранения элементов, в этом случае вы можете выйти из проблемы с памятью, если ваша основная память ограничена.Вместо использования массива вы можете использовать другую структуру данных, которая не требует последовательной памяти , то есть stack, queue, linked list, ... Я думаю, что их достаточно для элементов 100k(если больше, я не уверен).Кроме того, не забудьте оптимизировать свой код, чтобы уменьшить использование слишком большого объема памяти.

...