Это кажется правильным для небольшого процесса Java - помните, что Java не является идеальным выбором, если вы ищете очень маленький объем памяти.
Вы должны помнить, что JVM - это стек.основанный на машине, где каждый поток получает свой собственный стек.
Размер стека различается в зависимости от того, какой тип JVM вы используете - (я полагаю, поскольку я потерял страницу на oracle.com, в которой подробноэти значения) 32-разрядная JVM запускает каждый поток со стеком 320 КБ, а 64-разрядная JVM назначает 1 МБ на поток - это объясняет, почему большой пул потоков увеличивает размер памяти.
Помимо стека, JVM такжевыделяет пространство памяти для кучи - пространство стека обычно не выделяется из кучи, поэтому все это монтируется.
Если вы превышаете ограничения памяти, вы можете попытаться ограничить использование с помощью командыЛиния переключается при запуске приложения Java.
java -Xmx100m -Xss128k <followed by your other usual params>
-Xmx
используется для ограничения максимального размера кучи (например, -Xmx100m
будет ограничивать кучу до 100 МБ. -Xss
используется для ограничения размера стека, назначенного для каждого потока (например,-Xmx128k
будет ограничивать каждый стек до 128 КБ).
Существуют и другие параметры настройки, которые вы можете использовать, однако вы должны быть осторожны при ограничении памяти, так как это может вызвать проблемы с вашим приложением.
Сборка мусора - это еще одна область, которую можно настроить, чтобы помочь с использованием памяти, но я не буду вдаваться в эту область в таком небольшом приложении.
Как уже упоминал Инго, я бы сказал,Рекомендуется использовать профилировщик для своего приложения, чтобы увидеть, где выделяется память - во многих популярных IDE либо встроен профилировщик, либо они доступны в виде плагинов.