Какую структуру данных я должен использовать для обработки огромных данных - PullRequest
3 голосов
/ 05 мая 2010

Я анализирую огромные файлы xhtml и пытаюсь поиграть с содержимым в нем. В основном слова в нем, их позиции и т. Д. Я пытался использовать HashMap, ArayList и т. Д. Все они вызывают проблему OutOfMemory после загрузки 130347 данных. Какую структуру данных можно использовать для хранения огромных данных в JAVA.

Ответы [ 4 ]

2 голосов
/ 05 мая 2010

Рассмотрите возможность использования парсера SAX, он требует меньше памяти.

1 голос
/ 05 мая 2010

То, что вы делаете сейчас, собирая все свои данные в одну огромную структуру и затем обрабатывая ее, не сработает независимо от того, какую структуру данных вы используете. Попробуйте инкрементный подход, при котором вы читаете некоторые данные, затем обрабатываете их, затем читаете еще и т. Д. (На самом деле, вы будете делать таким образом свою собственную специальную структуру данных, которая будет обрабатывать фрагменты, поэтому сначала предложение не совсем точное.)

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

1 голос
/ 05 мая 2010

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

Если вы используете tomcat / eclipse, этот поток должен помочь вам: Настройки памяти Eclipse при получении «Java Heap Space» и «Out of Memory»

0 голосов
/ 05 мая 2010

Ваш вопрос довольно расплывчатый. Но если вам не хватает памяти, то вам, вероятно, следует вместо этого использовать базу данных на диске. PostgreSQL, MySQL, HSQLDB, что угодно.

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