о нехватке памяти Исключение - PullRequest
0 голосов
/ 22 марта 2012

Я использовал Thread Pool для разработки нового сервера ввода-вывода.Я использовал newFixedThreadPool как фабричный метод Executors для создания пула потоков.Мой сервер выдает исключение, когда я запускаю свой сервер в течение 20-30 минут.как справиться с этим исключением.

java.lang.OutOfMemoryError: Java heap space

Ответы [ 3 ]

1 голос
/ 22 марта 2012

Очевидно, что вы используете слишком много памяти, поэтому теперь вам нужно выяснить, почему.Без вашего источника очень трудно сказать, что не так, но даже с источником это может быть проблематично, когда программа начинает становиться сложной.

Что я нашел полезным, так это взять дампы памяти и посмотреть на нихв таких инструментах, как Анализатор памяти (MAT) .Он может даже сравнить несколько дампов, чтобы увидеть, какие объекты выделяются.Когда вы получите представление о том, какие объекты существуют, которые, по вашему мнению, не должны быть там, вы можете использовать инструмент, чтобы увидеть, какие у него корни (какие объекты имеют на него ссылку).

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

0 голосов
/ 22 марта 2012

обычно это Java -Xms5m -Xmx15m MyApp -Xms установить начальный размер кучи Java -Xmx установить максимальный размер кучи Java

и в eclipse в конфигурации java run в качестве аргумента VM -Xms128m

-Xmx512m

-XX: permSize = 128M

-XX: MaxPermSize = 384M

0 голосов
/ 22 марта 2012

Вы можете попытаться увеличить РАЗМЕР КАРТЫ и проверить, получаете ли вы проблему.

Однако я бы предпочел, чтобы вы попытались профилировать ваше приложение, чтобы выяснить, почему ваш размер кучи и где используется память. Есть несколько профилировщиков, доступных как открытый исходный код, которые вы можете попробовать.

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