Очевидно, что вы используете слишком много памяти, поэтому теперь вам нужно выяснить, почему.Без вашего источника очень трудно сказать, что не так, но даже с источником это может быть проблематично, когда программа начинает становиться сложной.
Что я нашел полезным, так это взять дампы памяти и посмотреть на нихв таких инструментах, как Анализатор памяти (MAT) .Он может даже сравнить несколько дампов, чтобы увидеть, какие объекты выделяются.Когда вы получите представление о том, какие объекты существуют, которые, по вашему мнению, не должны быть там, вы можете использовать инструмент, чтобы увидеть, какие у него корни (какие объекты имеют на него ссылку).
Чтобы получить дамп памятиДля создания работающей Java-программы используйте jmap -dump: format = b, file = heap.bin , а для автоматического получения дампа памяти при получении вашей программы и OutOfMemoryError вы можете запустить ее с помощью java -XX+ HeapDumpOnOutOfMemoryError failing.java.Program