Размер (бит) 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-бит.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нужно получить формат времени ввиде: 2019-08-22T13:26:36447019Z, но как это сделать что-то не вкурю
Клиент отправляет на сервер картинкуНа сервере в конфиге прописан каталог для сохранения изображения:
Моя задача реализовать PATCH метод контроллераРассмотрим два случая:
"Which lambda can replace MySecret class?"