Проблема здесь не в tomcat, а в Java в целом. Есть несколько разных мест, где java использует память. Среда выполнения java использует свою собственную память, и она будет включена в ваш номер, кроме того, java разбивает память на четыре отдельных места:
Куча: Это память, используемая для хранения ваших объектов и управляемая параметрами
-Xms
и-Xmx
.Стек: Это используемая память для хранения кадров стека для потоков, которые поддерживает ваша программа и которыми можно управлять с помощью параметра
-Xss
.Permgen Memory: Это память, используемая для хранения ваших скомпилированных классов и объединенных в пул строк а также некоторые другие вещи, и обычно им можно управлять с помощью
-XX: MaxPermSize
, хотя-XX
представляет собой параметр отладки, поэтому нет гарантии, что он присутствует на всех JVM. Но стандартные реализации Sun / Oracle по умолчанию всегда имели их.Выделенная память JNI Любые классы, использующие собственные методы и JNI, потенциально могут выделять неограниченную память. Эта память поступает из ОС, а не из кучи, и невозможно узнать, сколько памяти будет использовать собственный класс, не имея доступа к источнику.
Обзор модели памяти Java, вероятно, выходит за рамки ответа на этот вопрос, и я не смог найти хорошую краткую статью / описание в Интернете, но краткий ответ на ваш вопрос: если вы пытаетесь ограничить абсолютный объем памяти, используемый программой java, нет простого способа сделать Это. Эвристически, вероятно, сократите ваши параметры -Xms
и -Xmx
до 128 м, и вы должны приблизиться, но это действительно будет зависеть от вашего приложения.
Обзор модели памяти Java, вероятно, выходит за рамки ответа на этот вопрос, и я не смог найти хорошую краткую статью / описание в Интернете, но краткий ответ на ваш вопрос: если вы пытаетесь ограничить абсолютный объем памяти, используемой java-программой, нет простого способа сделать это. Эвристически, вероятно, сократите ваши параметры -Xms
и -Xmx
до 128 м, и вы должны приблизиться, но это действительно будет зависеть от вашего приложения.
Обзор модели памяти Java, вероятно, выходит за рамки ответа на этот вопрос, и я не смог найти хорошую краткую статью / описание в Интернете, но краткий ответ на ваш вопрос: если вы пытаетесь ограничить абсолютный объем памяти, используемой java-программой, нет простого способа сделать это. Эвристически, вероятно, сократите ваши параметры -Xms
и -Xmx
до 128 м, и вы должны приблизиться, но это действительно будет зависеть от вашего приложения.