Сколько может расти стек?
Чтобы настроить максимальный размер стека, вы можете использовать опцию VM с именем ss
. Опция VM обычно передается с использованием -X {option}. Таким образом, вы можете использовать java -Xss1M
для установки максимального размера стека на 1M.
Каждая нить имеет хотя бы один стек. Некоторые виртуальные машины Java (JVM) помещают Java-стек (вызовы методов Java) и собственный стек (вызовы Native-метода в виртуальной машине) в один стек и выполняют разматывание стека с помощью управляемого Managed to Native Frame, известной как M2NFrame. Некоторые JVM сохраняют два стека отдельно. Xss
в большинстве случаев задает размер Java Stack.
Для многих JVM они устанавливают разные значения по умолчанию для размера стека на разных платформах.
Можем ли мы ограничить этот рост?
При вызове метода в стеке этого потока создается новый стек стека. Стек будет содержать локальные переменные, параметры, обратный адрес и т. Д. В java вы никогда не сможете поместить объект в стек, только ссылка на объект может быть сохранена в стеке. Поскольку массив также является объектом в java, массивы также не хранятся в стеке. Итак, если вы уменьшите количество локальных примитивных переменных, параметры, группируя их в объекты, вы можете уменьшить пространство на стеке. Фактически, тот факт, что мы не можем поместить объекты в стек java, влияет на производительность некоторое время (промахи в кеше).
Имеет ли стек какое-либо минимальное значение по умолчанию или максимальное значение по умолчанию?
Как я уже говорил, разные виртуальные машины отличаются друг от друга и могут изменять версии. См. here.
Как работает сбор мусора на стеке?
Сбор мусора на Java - это горячая тема. Сбор мусора направлен на сбор недостижимого объекта в куче. Так что нужно определение достижимого. Все в стеке является частью корневых ссылок в GC. Все, что доступно из каждой стопки каждой нити, должно рассматриваться как живое. Существуют также некоторые другие корневые ссылки, такие как объекты Thread и некоторые объекты класса.
Это только очень неопределенное использование стека на GC. В настоящее время большинство JVM используют GC поколения. This article дает краткое описание о Java GC. А недавно я прочитал a very good article, рассказывая о GC на .net. GC на oracle jvm довольно похож, поэтому я думаю, что это также может помочь вам.
просто небольшое замечание для людей, читающих это: Escape-Analysis (Java 6 Update 21 и выше) позволяет хранить объекты в стеке. Меньше работы для сборщика мусора. – miraclefoxx
Частичный дубликат http://stackoverflow.com/questions/6020619/where-to-find-default-xss-value-for-sun-oracle-jvm – Vadzim