Java trie node Boolean vs boolean

1

Я создаю класс 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

3 ответа

3
Лучший ответ

Вместо этого:

boolean EOW = Boolean.TRUE;

Просто напишите это:

boolean EOW = true;

Нет никакой причины использовать Boolean.TRUE, он будет автоматически unboxed до примитивного значения true любом случае, он более эффективен и менее подробен, чтобы использовать значение true напрямую.

Используйте только классы-оболочки, такие как Boolean когда у вас есть все основания для этого - в противном случае используйте примитивные типы, такие как boolean. Одна из причин использования обертки - когда вам нужно хранить значения в коллекции (например, ArrayList) - классы коллекции могут содержать только объекты, а не примитивные значения, поэтому в этом случае вам придется использовать класс-оболочку.

Использование Boolean объектов никогда не бывает более эффективным, чем использование boolean примитивных значений.

Обратите внимание, что примитивные значения - это просто значения, а не объекты. Если вы используете значение true в вашем коде десять раз, в памяти не будет десяти дубликатов объектов.

  • 0
    да, я знаю о коллекциях, из-за структуры дженериков. Я знал, что использовать примитивы лучше, чем обертки, но я не был уверен насчет Булева
  • 0
    То есть вы имеете в виду, что значения типа true и false являются чем-то вроде обналичивания?
Показать ещё 8 комментариев
3

Просто используйте примитивный тип boolean с true и false. Примитивные типы занимают меньше памяти, работают с лучшей производительностью и являются нулевыми.

0

Я ожидаю, что точный код, который вы вставили, должен быть оптимизирован для boolean EOW = true; , поэтому его вообще не следует распаковывать, но если такой оптимизации нет, тогда у вас не будет затронутой памяти, потому что вы используете статическое поле, которое будет инициализировано только один раз. Тем не менее, вы все равно потеряете одну операцию по методу imlicit running booleanValue(), который просто вернет сохраненное значение. На самом деле, я понятия не имею, почему вы хотели бы иметь такое выражение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню