Выделение большого списка объектов, выдающих OutOfMemoryError - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь упорядочить большой список объектов ~ 1 миллион, и он выдает OutOfMemoryError при попытке добавить объекты в Arraylist с ~ 20K объектами.Я хотел бы иметь один файл XML.Как мне этого добиться?

Примечание. У меня ограничение памяти JVM составляет 512 МБ

.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Вы должны понимать, что в 64-битной машине каждый указатель стоит 8 байтов.По этой причине, когда вы пытаетесь загрузить большую коллекцию, вы не просто загружаете данные, вы выделяете память для каждого поля, каждого атрибута объектной модели и каждой мембраны вашей коллекции.

У вас есть три варианта:

  • , чтобы выделить больше памяти.
  • Чтобы найти более компактный формат, когда вы помещаете все в память.
  • третье - реализовать какую-то прокрутку, чтобы загружать только часть набора за раз.
0 голосов
/ 15 февраля 2019

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

В этом случае вам нужно записать XML в файл, используя что-то вроде: XMLStreamWriter.Избегайте использования библиотек, которые загружают все в память перед записью на диск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...