2014-01-28 5 views
2

Скажите, если я хочу массив из 4 int'sЦелочисленный массив или отдельные целые числа?

ex.

int[] iA = {32,33,34,35}; 

будет ли этот массив занимать больше памяти, чем объявлять их как индивидуальные Int?

ex.

int i0 = 32; 
int i1 = 33; 
int i2 = 34; 
int i3 = 35; 
+0

Где эти объявления переменных? Локальный или экземпляр/класс? –

+5

Это своего рода бессмысленный вопрос. Если вам нужен массив, вам нужен массив ... –

+0

Вы заботитесь о памяти кучи против стека? –

ответ

2

Каждый INT представляет собой примитивный тип данных, размеры которых определены в http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html.

Массив - это объект, который несет некоторые накладные расходы. Существует хорошее обсуждение того, как найти размер объектов Java в how calculate java array memory usage.

+0

Java, насколько мне известно, не указывает, сколько памяти используется примитив. И все они могут храниться как минимум в 4 байт, даже если им потребуется всего 2 или менее. – zapl

+0

Вы нажимали на ссылку выше, указав на сайт Oracle? – chr

+0

Таковы размеры, которые вы видите в своей программе. Это не обязательно размеры, которые JVM выделяет для их хранения. 32-битная/64-разрядная выровненная память быстрее доступна, чем при использовании нечетных байтовых номеров - http://stackoverflow.com/questions/229886/size-of-a-byte-in-memory-java/Similar thing: https: // wikis. oracle.com/display/HotSpotInternals/CompressedOops – zapl

2

Экономия места не должна быть первой проблемой, влияющей на ваше решение здесь. Вы должны думать о ответы на эти вопросы:

  • Может число int сек изменения в будущем - если ответ «да», то вам нужен массив.
  • Вам нужна «адресность» по целым числам? - другими словами, если вам присвоен индекс, скажем, 3, вам нужна возможность доступа к i3? Если ответ «да», вам определенно нужен массив.

Чтобы ответить на ваш вопрос, массив займет несколько дополнительных байтов памяти, потому что Java необходимо выделить пространство самому объекту массива. Эти накладные расходы заметны, когда число int s невелико, но оно быстро уменьшается по мере роста вашего массива.

1

Individual INT будет занимать меньше памяти, поскольку есть

  1. Меньше ссылка на массив участвует.
  2. Нет объектов набивка не участвует

http://algs4.cs.princeton.edu/14analysis/

+0

Вы делаете необоснованные предположения. Из ссылки, которую вы опубликовали: * «Кроме того, обычно использование памяти обычно составляет 8 байтов (на 64-разрядной машине). * * –

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