Избегать «ошибки нехватки памяти» в Java (затмение) при использовании большой структуры данных?
Итак, я пишу программу, которая, к сожалению, должна использовать огромную структуру данных для завершения своей работы, но она завершается с ошибкой «нехватка памяти» во время инициализации. Хотя я полностью понимаю, что это значит и почему это проблема, у меня возникают проблемы с ее преодолением, поскольку моя программа должна использовать эту большую структуру, и я не знаю другого способа ее хранения.
Сначала программа индексирует большой объем текстовых файлов, которые я предоставляю. Это отлично работает.
Затем он использует этот индекс для инициализации большого 2D-массива. Этот массив будет иметь n² записей, где «n» - количество уникальных слов в корпусе текста. Для сравнительно небольшого фрагмента, который я тестирую (около 60 файлов), требуется примерно 30 000 × 30 000 записей. Это, вероятно, будет больше, как только я запусту его на своем полном корпусе.
Он последовательно терпит неудачу каждый раз, после того, как индексирует, пока инициализирует структуру данных (для дальнейшей работы).
Вещи, которые я сделал, включают в себя:
обновить мой код, чтобы использовать примитивint[]
вместоTreeMap
устранить избыточные структуры и т.д ...Кроме того, я запустил программу с-Xmx2g
чтобы максимально использовать мою выделенную памятьЯ уверен, что это не будет простым решением кода, но, скорее всего, потребует совершенно нового подхода. Я ищу, что это за подход, какие-нибудь идеи?
Спасибо Б.