Я столкнулся с этим сообщением в SO Используют ли неинициализированные примитивные переменные экземпляра память?
В нем говорится: "В Java стоит ли объявлять переменную экземпляра класса без памяти, не инициализируя ее? Например: имеет ли int i; используйте любую память, если я не инициализирую ее с помощью я = 5;?
Мой вопрос в том, что в случае локальных переменных, например, у меня есть метод foo()
public int foo(){
int x;
//Write code which does not use/initialize x
}
Будет ли занимать локальную переменную x
?
Edit
Джон Ответ
ОБНОВЛЕНИЕ: сделав еще немного исследований по этому вопросу, я нахожу эту страницу, которая подсказывает мне, что, хотя скомпилированный байт-код подразумевает, что пространство выделено для x, оно действительно может быть оптимизировано jvm. К сожалению, я не нашел полного описания выполненных оптимизаций. В частности, в главе документации JVM по компиляции не упоминается удаление неиспользуемых переменных из стека. Таким образом, если не считать дальнейших открытий, я бы ответил, что это зависит от реализации, но это похоже на оптимизацию, которую мог бы выполнять любой уважающий себя компилятор. Заметьте также, что неважно, что это локальная переменная, а не поле. Фактически локальные переменные наиболее вероятны для оптимизации, поскольку они легче всего анализировать и устранять. (именно потому, что они локальны)
Посмотрим, можно ли найти больше доказательств, которые поддерживают это.