Я создаю класс trie node, который содержит поле с логическим типом, и я не знаю, что будет лучше использовать boolean или Boolean.
Я знаю, что один экземпляр Boolean принимает 16 байтов и 4 байта, который ссылается на 32-разрядную виртуальную машину. Но булевы имеют константы Boolean.TRUE и Boolean.FALSE, что можно использовать для оптимизации пространства. Таким образом, приложение wiil занимает 4 * N + 32 байта, где N - количество узлов, да?
Насколько мне известно, логическое значение занимает 4 байта (в массиве он оптимизируется до 1 байт на элемент) в 32-разрядной VM тоже)
Однако я могу использовать такой код
boolean EOW = Boolean.TRUE;
но сколько места займет он и сколько времени займет автобокс /inboxing?
Итак, что будет лучше использовать для оптимизации использования пространства и времени? И не могли бы вы ответить мне, сколько пространства это сказывается на 64-битной виртуальной машине?
Вместо этого:
boolean EOW = Boolean.TRUE;
Просто напишите это:
boolean EOW = true;
Нет никакой причины использовать Boolean.TRUE
, он будет автоматически unboxed до примитивного значения true
любом случае, он более эффективен и менее подробен, чтобы использовать значение true
напрямую.
Используйте только классы-оболочки, такие как Boolean
когда у вас есть все основания для этого - в противном случае используйте примитивные типы, такие как boolean
. Одна из причин использования обертки - когда вам нужно хранить значения в коллекции (например, ArrayList
) - классы коллекции могут содержать только объекты, а не примитивные значения, поэтому в этом случае вам придется использовать класс-оболочку.
Использование Boolean
объектов никогда не бывает более эффективным, чем использование boolean
примитивных значений.
Обратите внимание, что примитивные значения - это просто значения, а не объекты. Если вы используете значение true
в вашем коде десять раз, в памяти не будет десяти дубликатов объектов.
Просто используйте примитивный тип boolean
с true
и false
. Примитивные типы занимают меньше памяти, работают с лучшей производительностью и являются нулевыми.
Я ожидаю, что точный код, который вы вставили, должен быть оптимизирован для boolean EOW = true;
, поэтому его вообще не следует распаковывать, но если такой оптимизации нет, тогда у вас не будет затронутой памяти, потому что вы используете статическое поле, которое будет инициализировано только один раз. Тем не менее, вы все равно потеряете одну операцию по методу imlicit running booleanValue()
, который просто вернет сохраненное значение. На самом деле, я понятия не имею, почему вы хотели бы иметь такое выражение.
true
иfalse
являются чем-то вроде обналичивания?