[Java SE] Вопросы нуба

Violence

Гений мысли
Проверенный
Победитель в номинации 2019
Мастер реакций
Любитель реакций
Знаток великого письма
Знаток письма
Куратор Данных
Старожил I степени
Медаль за активность на Форуме
Преподаватель
За веру и верность форуму
За заслуги перед форумом
Сообщения
1 047
Розыгрыши
1
Репутация
2 246
Реакции
1 281
Баллы
1 808
Узнав что :
int 4 байта от -2,147483648 до 2147483647 (диапозон)
short 2 байта от-32768 до 32767
long 8 байт от-9223372036854775808L до -9223372036854775807L
byte 1 байт от-128 до 127

В задачи скажем требуется число 50 , какое из типов выгоднее присвоить данному диапазону для облегчения обработки JRE или абсолютно не имеет значения какой тип будет присвоен самое главное что бы соответствовал диапазону ?
 

Если в последствии это число не будет превышать 127 и не будет меньше -128, то лучший вариант - byte. Хотя для маленьких задачек это не дает особой выгоды, привыкать к выделению 8 байт под число 5 не стоит.
 
Почему же? В эмуле во многих местах использовать byte надо, зачем выделять int? если работа с небольшими данными
 
Почему же? В эмуле во многих местах использовать byte надо, зачем выделять int? если работа с небольшими данными
К примеру уровень :)
но нет жи, он в эмулях интовое)
 
  • Мне нравится
Реакции: kick

    kick

    Баллов: 19
    Без комментариев
ХАЧУ 100500+ УРАВИНЬ НА ОФИ!
А вообще, хорошая штучка - var, которой в джаве нет... :НУЧОЗА:
oops, не на ту кнопку жмякнул. Соедините 2 мессаги в одну, если надо.
 
К примеру уровень :)
но нет жи, он в эмулях интовое)
Вот и мне интересно знать , это просто привычка ? или просто забывчивость что существуют и такие типы данных или же просто разница особо не существенная ?

[P/s] Если допустим в эмуле будет всё через инт (естественно целые числа) а не как полагается к примеру byte / short / long то нагрузка или обработка данных увеличится ? (если да то пагубно это для того или иного продукта на java и на сколько ? или не очень ?)
 
Вот и мне интересно знать , это просто привычка ? или просто забывчивость что существуют и такие типы данных или же просто разница особо не существенная ?

[P/s] Если допустим в эмуле будет всё через инт (естественно целые числа) а не как полагается к примеру byte / short / long то нагрузка или обработка данных увеличится ? (если да то пагубно это для того или иного продукта на java и на сколько ? или не очень ?)
Почему же? В эмуле во многих местах использовать byte надо, зачем выделять int? если работа с небольшими данными
 
А что касаемо нагрузки / обработки информации гораздо затрудняется или нет ?
 
А что касаемо нагрузки / обработки информации гораздо затрудняется или нет ?
Ощущается так же как Вы чувствуете укус комара когда спите.
Вроде бы больше жрет но не заметно пока не начнете разбор и дебаг :)
 
Забыли о char (целое беззнаковое слово 0-2^16-1).
Сколько именно выделится под ваш byte/shot/int/long вы знать не можете т.к. это зависит от реализации и самой аппаратуры. Загляните в sun.misc.Unsafe и метод arrayIndexScale. Выш byte/shot/int/long может оказаться в регистре и никогда не попасть в память.

Не стоит забывать и о выравнивании. На x86 невыровненный доступ может быть в 2 и более раза медленнее . О cache-line alignment тут и заикаться бессмысленно. Смотрите знаменитый патент MIPS по теме и ссылки на него.
Вероятно, ваш byte будет прочитан целой линией, вырезан по маске и сдвинут. Это может быть медленно. c int такого может не происходить.
 
Главное нашел где писать - в вопросах для нубов расширенную спеку.
 
Почему же? В эмуле во многих местах использовать byte надо, зачем выделять int? если работа с небольшими данными
Потому-что выравнивание памяти порой намного страшнее (+ фрагментация хипа, если попадет в него), чем выделение излишнего типа.
//Опоздал, 90h уже объяснил.

А что касаемо нагрузки / обработки информации гораздо затрудняется или нет ?
Если не кидать постоянно long'и и типы данных, которые превышают 4 байта, то работа с ними происходит намного быстрее, т.к. сами данные влезают в регистр (в ином случае берется указатель).
 
  • Мне нравится
Реакции: kick
Вообще тсу стоит посмотреть сюда для ознакомления со спецификациями вм и ознакомиться с примитивными типами
Потому-что выравнивание памяти порой намного страшнее (за счет фрагментации хипа), чем выделение излишнего типа.
Но если нам нужно не занимать память и экономить и то место кода где особенно не нужно использовать большие размеры нам прийдётся использовать byte.
 
Но если нам нужно не занимать память и экономить и то место кода где особенно не нужно использовать большие размеры нам прийдётся использовать byte.
Только если правильно рассчитать (тобишь заняться т.н. байтодрочеством), что в условиях JVM довольно сложно. В ином случае, все равно произойдет выравнивание и никакой пользы от int -> byte не будет, но и даже, будет хуже, в некоторых случаях. Если уж заниматься байтодрочеством, то только с помощью direct buffer, либо unsafe и прямого управления памятью.
 
Последнее редактирование:
  • Мне нравится
Реакции: kick
Назад
Сверху Снизу