Занимает ли переменная место в куче при объявлении? Иными словами, если я захочу объявить переменную, повлияет ли это на объем используемой памяти?
Да повлияет, но незначительно, однако если переменных много увеличение объёма используемой памяти будет большим (для современных ПК все равно некритичным).
Память под переменную выделяется, если только Вы используете ее в коде. (заслуга компилятора)
В зависимости от типа переменные могут занимать различный объем памяти. Самый малый byte — Занимает один байт памяти, а самый "Объемный" тип double — 8 байт. String — смотря сколько символов в строке. Тут можно посмотреть весь список примитивов. Чем больше примитивов в классе, тем больше будет весить объект класса.
Конкретно в кучу "складываются" только объекты, переменные помещаются в стек.
Место в куче занимают объекты. Переменные занимают место в стеке. Но если вы объявите переменную и никогда её не используете, компилятор её вообще выкинет. Например этот код
public class Example {
public static void main(String[] args) {
int a;
int b = 2;
}
}
Будет скомпилирован в такой class-файл (для краткости показываю только метод main):
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=1, locals=3, args_size=1
0: iconst_2
1: istore_2
2: return
LineNumberTable:
line 53: 0
line 54: 2
LocalVariableTable:
Start Length Slot Name Signature
0 3 0 args [Ljava/lang/String;
2 1 2 b I
Как видно, нет даже упоминания переменной a.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей