2010-03-22 4 views

ответ

7

За исключением небольшого пространства для метаданных (которое будет выделено один раз в общей сложности, не один раз на экземпляр), имя не имеет значения . Таким образом, в приведенном примере каждая из этих переменных занимает 2 байта, возможно, дополняется 4 байтами в зависимости от других полей и используемой виртуальной машины.

Обратите внимание, что даже для ссылочных типов (включая массивы) пространство, занимаемое самой переменной , фиксируется по типу (и деталям виртуальной машины) - пространство, занимаемое ссылкой на пустую строку, является тем же как пространство, взятое ссылкой на огромную строку.


Там может быть стоимость использования переменной - или, возможно, в классе с помощью переменной. Вам нужно будет обратиться к спецификации VM, чтобы проверить точное двоичное представление. Даже тогда это представление в файле класса, что, возможно, не приведет к увеличению использования памяти к тому времени, когда все JIT скомпилировано и т. Д. В любом случае почти наверняка будет неактуально в схеме грандиозных вещей - памяти, необходимой фактическим объектам почти всегда затмевает память, требуемую самим кодом.

1

Значения переменных не означают ничего после компиляции; есть только там, чтобы сделать программу легкой для людей, чтобы читать и писать.

+1

Уверен? Что относительно открытых полей в классе, которые также являются переменными? – TomTom

+3

Вы видели тег Java? Как вы можете декомпилировать Java-код, восстанавливая имена переменных, если они нигде не хранятся? – paxdiablo

+0

Даже если пространство, занимаемое переменными, пренебрежимо мало, я не думаю, что компилятор будет продолжать игнорировать такие вещи. –

0

Переменные названия предназначены для чтения человеком. В этом случае s и Ka..a имеют одинаковый размер.

@TomTom для таких вещей, как публичные, их имена снова не меняют размер, но факт, что они публичны, если я не ошибаюсь. Этот размер может быть взят классом, который их содержит.

0

Обычно имена переменных используются компилятором, а не временем выполнения. Если класс экспортируется из вашего модуля, имена будут закодированы в метаданных.

Но если вы беспокоитесь о том, сколько места займет ваша программа, тогда имя переменных является наименее из вас беспокоит.

Смежные вопросы