Откуда берется стековая память, выделенная потоку? - PullRequest
3 голосов
/ 25 сентября 2010

У меня есть несколько вопросов, касающихся java GC и управления памятью.

В java мы определяем верхнюю и нижнюю границы памяти процесса параметрами xmx и xms.Используя эти параметры, JVM выделяет молодое старое и пермское пространство.Итак, если создаются новые потоки, то из какой памяти стеки выделяют потоки?это из пермского пространства или из любого другого пространства?

Также статические переменные класса выделяются для какого пространства молодое, старое или пермское пространство?(Полагаю, Пермь?)

Ограничивает ли параметр XmX молодых + старых генераторов ИЛИ молодых + старых + перманских ИЛИ молодых + старых + перми + размер стека ??

Спасибо

Ответы [ 3 ]

4 голосов
/ 22 декабря 2010

Как правило, стековая память поступает из области стека, которая не зависит от области кучи и области перманента.

Статические переменные размещаются в куче, кроме строковых и числовых констант.

-Xmx параметр ограничивает только молодые + старые части кучи, поскольку область perm не является ее частью.

Размер области стека устанавливается флагом -Xss, размер области кучи устанавливается флагом -Xmx, а размер области перманента устанавливается -XX:MaxPermSize.

Если вы хотите погрузиться в управление внутренней памятью JVM, я рекомендую запись в блоге .

0 голосов
/ 17 апреля 2011

на солярисе вы можете использовать 'ulimit -a', чтобы увидеть ограничение стека процессов.Я думаю, что стек потоков взят из этого ресурса.Мне интересно, будет ли JVM выпускать сборщик мусора, когда в куче достаточно места для потоков, но недостаточно места для их стека.

0 голосов
/ 25 сентября 2010

Пространство стека потоков контролируется другой опцией -Xss . Здесь - это справка, которая может помочь вам в этой конкретной теме.

...