TGViewer
Android under the hood Android under the hood @android_under_the_hood · 1.53K subscribers
Post #42 1.6K
Пару фактов о JVM стэке.

Любая последовательность Kotlin / Java команд выполняется на некотором потоке и ни для кого не секрет что каждый поток имеет свой персональный стэк, некоторую область памяти которую выделяет виртуальная машина Java.

Ниже я привёл несколько полезных фактов об этой магической штуке:

1) JVM стэк, как я уже упомянул, выделяется под каждый поток и предназначен для хранения некоторых кусков памяти называемых фреймами.

Фрейм является отдельным элементом стэка и используется для хранения локальных переменных, стэка операндов и cсылки на специальную структуру данных, содержащую информацию о текущем методе.

Возьмём для примера следующую программу:

fun main() {
println("Hello, Universe!")
}


При вызове метода main будет создан фрейм, метод в таком случае называется текущим, так как на данный момент выполняется его код, затем вызывается метод println для которого будет создан новый фрейм, теперь он станет текущим и так далее, после завершения выполнения метода println его фрейм будет удалён.

2) Фреймы могут содержать стэк операндов для вычисления команд байт-кода, это как регистры процессора, чтобы вычислить что-то нужно сначала положить операнды в регистр или в случае JVM в стэк операндов.

Также фреймы используются для механизма возврата значений из метода и распространения исключений.

3) Размер стэка зависит от реализации виртуальной машины Java, для современных версий Android это около 8000-8200KB или ~8MB.

4) Если стэк переполнится JVM упадёт с исключением StackOverflowError.

5) При создании нового потока Thread можно указать в конструкторе размер стэка в битах, новый размер будет зависеть от внутренних политик JVM, например на моём телефоне удалось получить стэк размером от 2MB до 134MB.

6) Для уменьшения загрузки стэка стоит поменьше использовать рекурсию + в Kotlin были придуманы inline functions для встраивания кусков куда без вызова метода.

P.S. Хочу немного похвастаться тем, что написал первую полноценную статью!

Пишите в комментах ваше мнение и всем хорошего кода!
  • 🔥 18
  • 👍 7
More from @android_under_the_hood
  1. Oct 4, 2026Всем привет, хочу поделиться проектом, который запустил 1 октября — ЗдесьЯ. Это цифровая с…
  2. Oct 2, 2026Kotlin lambdas, часть I. До версии Kotlin 2.0 лямбды компилировались в анонимные классы, р…
  3. Sep 27, 2026Делегат свойства в Kotlin. В Kotlin есть конструкция, которой нет в JVM: var name by NameD…
  4. Sep 23, 2026val vs var под капотом. На уровне Kotlin все просто: val x = 10 var y = 20 y = 30 // компи…
  5. Sep 20, 2026Возвращение Прошло уже полгода с последней записи на канале. За это время в моей жизни про…
  6. Feb 5, 2026Пару фактов о Go, часть II. 4) Вместо Kotlin Nullability указатели как в С/C++, то есть об…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →