2012-06-26 3 views
3

Как я знаю, логический размер в 16 байт {8 в качестве заголовка, 1 полезной нагрузки, * выравнивание до 8}Каков размер булевой массива в Java

, сколько это займет, если булева переменная была массивом ...

мой reference

+1

Почему вы не просто [измеряете это] (http://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to-determine-the-size-of- an-object) –

+1

Хотя это не ответ на вопрос, но лучше использовать 'java.util.BitSet', который предназначен специально для хранения массива логических значений. – Yura

ответ

3

вы спрашиваете о Boolean объект или boolean примитив? Размер объекта может быть 16 байтов (хотя, вероятно, зависит от реализации), тогда как boolean, вероятно, будет потреблять 4 байта (неявно используется int).

Таким образом boolean[] будет потреблять N * 4 байт (где N - размер массива) + некоторый заголовок объекта. Boolean[] будет потреблять N * 16 + заголовка (в соответствии с предположением о Boolean размере.

Это сказанное считает писать свой собственный массив типа класса и пакет 32 булевых в один int (вы должны написать несколько битовых операции вручную), . так же, как BitSet класс делает

+1

Array имеет свойство 'length' (int). –

+1

> В реализации виртуальной машины Oracle, логические массивы ... реализованы как массивы 8-битных значений. См. Http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.baload –

-1

размер массива Объект будет: 8 + 4 = 12 байт (здесь 4 длина массива) Если длина массива является Н, то булевы элементы будут: N * 16 байт Таким образом, размер будет: (12 + N * 16) байт округлым (по высоте) на 8

В качестве примера: если N = 10, то 12 + 10 * 16 = 172 и после округления фигуры JVM размер будет 176 байтов.

+1

Вышеприведенный неверный. Во-первых, массив Boolean будет содержать ссылки на объекты Boolean, там будут N ссылок и их размер не зависит от размера логического объекта (в HotSpot обычно указывается 4 байта). Кроме того, вышесказанное предполагает, что все булевы объекты различны. Обычно вы повторно используете Boolean.TRUE и Boolean. FALSE, поэтому свободного места для булевых объектов не будет. –