Стек операнда для метода V / S для локальных переменных для метода - PullRequest
0 голосов
/ 02 сентября 2018

стек JVM Я не могу понять, в чем разница между стеком операндов для метода и локальными переменными для метода? и почему размер стека составляет 65535 операндов, если JVM является 32-битным компьютером?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

В наши дни большинство JVM являются 64-битными машинами, так как даже многие телефоны являются 64-битными.

Операнд 64K - это число локальных переменных (хотя long и double принимают две). При этом учитываются только примитивы и ссылки. Объекты не находятся в стеке на уровне байт-кода (хотя они могут быть с escape-анализом во время выполнения)

Примечание: каждый метод ограничен 64 КБ, поэтому вряд ли будет полезно иметь более 64 КБ локальных переменных.

0 голосов
/ 02 сентября 2018

В JVM есть различие между значениями, хранящимися в переменных, и промежуточными результатами выражений: например, в (a + b) + c, a, b и c - локальные переменные, но промежуточный результат a + b сохраняется в стеке.

Максимальный размер стека не имеет ничего общего с количеством битов в машинном слове.

...