2012-06-14 3 views

ответ

9

Объем памяти, выделяемый для стека потоков, специфичен для вашей версии JVM Version + Operating System. Он сконфигурирован с параметром -XX: ThreadStackSize (-Xss в более старых версиях.) Anecdotally 512KB является «нормальным», хотя он равен 1024 на 64-битном Linux, что, вероятно, является платформой, наиболее часто критичной (по мнению одного парня)

+0

Как вы сказали, это ThreadStackSize, который по умолчанию 512 КБ (для 32 бит), эта память зарезервирована для протектора во время создания или динамически потребляется, поскольку вызовы метода вложены? – Ranger

+0

Это зарезервировано. То, что это означает, также зависит от платформы, но принципиально, если операционная система не может гарантировать, что она может обеспечить память, исключение OOM произойдет во время создания потока. (возможность предоставления памяти может включать в себя, например, принудительное использование данных приложения в своп-пространстве). Это связано с контрактом базовой операции malloc. Это также предполагает, конечно, современную JVM с естественными потоками. Что происходит в интерпретаторе - это бизнес JVM. – Affe

+1

Также помните, что linux имеет ограничение пользовательского потока, не зависящее от ограничений памяти. Java «Out Of Memory: невозможно создать собственный поток». Не обязательно указывает на то, что проблема была на самом деле отсутствием физической ОЗУ. – Affe

2

Каждый поток в приложении Java имеет свой собственный стек. Стек используется для хранения обратных адресов, аргументов вызова функции/метода и т. Д. И по размеру стека по умолчанию составляет 512 КБ. Вы можете изменить команду -Xss jvm.

java -Xss128k 
Смежные вопросы