Занимает ли переменная место в куче при объявлении? Иными словами, если я захочу объявить переменную, повлияет ли это на объем используемой памяти?
Да повлияет, но незначительно, однако если переменных много увеличение объёма используемой памяти будет большим (для современных ПК все равно некритичным).
Память под переменную выделяется, если только Вы используете ее в коде. (заслуга компилятора)
В зависимости от типа переменные могут занимать различный объем памяти. Самый малый 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
.
Как меняется крипторынок и к чему готовиться владельцам криптообменников
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Как заставить компонент GUI(кнопку, например) передать в метод класса-слушателя параметр?
как я могу проверить, вернул ли что-то данный запрос? ResultSet rs = stmtexecuteQuery( "SELECT * FROM USERS WHERE NICK ='" + nick + "';" ); (Я хочу проверить имеется ли запись...
Из статического блока вызываю метод который инициализирует массив (причем в самом методе это видно - выводит 35)Но когда обращаюсь в коде - оказывается...