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