Размер (бит) boolean 8 (в массивах), 32 (не в массивах используется int). Вот понимаю что всегда int это 32 бита. А как определить и понять, boolean в массивах и не в массивах?
boolean[] array = {false, true, false}; //здесь boolean 8 бит (т.к в массиве)?
boolean person = true; // здесь boolean 32 бита (т.к не в массиве?)
Можно здесь по подробнее, информация взята у https://ru.wikibooks.org/wiki/Java/%D0%A2%D0%B8%D0%BF%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85
Сходил по ссылке, там написана какая-то ересь (как минимум для виртуальной машины HotSpot). Чтобы убедится в этом, возьмём jol и посмотрим самостоятельно размер занимаемой памяти полем типа boolean.
Example.java
class Example {
boolean x = true;
}
ShowLayout.java
import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.info.GraphLayout;
import org.openjdk.jol.vm.VM;
public class ShowLayout {
public static void main(String[] args) {
boolean[] a = {false, true, false};
// Информация об используемой виртуальной машине
System.out.println(VM.current().details());
// Информация о размере поля типа boolean
System.out.println(ClassLayout.parseClass(A.class).toPrintable());
// Информация о размере массива
System.out.println(GraphLayout.parseInstance((Object) a).toPrintable());
// Информация о структуре массива
System.out.println(ClassLayout.parseInstance(a).toPrintable());
}
}
Компилируем
javac -cp jol-cli-0.9-full.jar ShowLayout.java
Запускаем
java -javaagent:jol-cli-0.9-full.jar ShowLayout
Получаем
# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 3-bit shift.
# Objects are 8 bytes aligned.
# Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
# Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
A object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 12 (object header) N/A
12 1 boolean Example.x N/A
13 3 (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 3 bytes external = 3 bytes total
[Z@b81eda8d object externals:
ADDRESS SIZE TYPE PATH VALUE
76b229190 24 [Z [false, true, false]
[Z object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 a8 ed 81 (00000001 10101000 11101101 10000001) (-2115131391)
4 4 (object header) 0b 00 00 00 (00001011 00000000 00000000 00000000) (11)
8 4 (object header) 05 00 00 f8 (00000101 00000000 00000000 11111000) (-134217723)
12 4 (object header) 03 00 00 00 (00000011 00000000 00000000 00000000) (3)
16 3 boolean [Z.<elements> N/A
19 5 (loss due to the next object alignment)
Instance size: 24 bytes
Space losses: 0 bytes internal + 5 bytes external = 5 bytes total
По цифре 1 в колонке SIZE напротив Example.x видим, что "не в массивах" boolean имеет размер 1 байт, то есть 8 бит. И по цифре 3 в колонке SIZE напротив boolean [Z.<elements> видимо, что три элемента занимают 3 байта. То есть в обоих случаях boolean имеет размер 8-бит.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости