2015-05-06 1 views
1

Я прочитал следующее в Начиная с Java. от структур управления через структуру данных - 3-е издания Тони Гэддис на странице 67:Использование процессора при использовании байтов и коротких типов данных в Java

Когда значение байта или короткие типов данных используются в арифметических выражениях, они временно преобразуются в целое значение.

Это относится к Java.

Мне было интересно, выполняются ли математические операции с использованием байтов или коротких типов данных, хотя они сохраняют память, что увеличивает использование процессора из-за преобразования в тип данных int, а не только с использованием типов данных int.

Например:

ли это:

byte x = 2; 
byte y = 3; 
int z = x + y; 

использование более процессора, чем это:

int x = 2; 
int y = 3; 
int z = x + y; 

Я понимаю, что первый пример использует меньше памяти , И я также понимаю, что разница в использовании процессора, если таковая имеется, будет очень незначительной.

+3

Вы считали, что сравниваете это с собой? – bhspencer

+0

http://stackoverflow.com/questions/14531235/in-java-is-it-more-efficient-to-use-byte-or-short-instead-of-int-and-float-inst – Shar1er80

+0

@bhspencer I и мои результаты были неубедительными. Недостаточная точность. Поэтому я ищу теоретический подход к этому. –

ответ

2

Для выполнения вычислений (например, x + y) процессору необходимо загружать как x, так и y в регистры (зависит от архитектуры, но по крайней мере на x или y должны быть в регистре). Регистры имеют размер 32 или 64 бит (по крайней мере, на платформах, где Java может использоваться). Таким образом, эти значения в любом случае преобразуются в 32 (64) битное целое число. Это делается автоматически и не требует дополнительных ресурсов ЦП. Таким образом, скорость вычислений будет одинаковой.

+0

Я сделал тест в миллисекундах, и это было подтверждено. –

0

Да, хранение информации в виде байтового или байтового массива добавит нагрузку на ваш процессор, если вам нужно выполнить вычисления.

Как правило, нет никаких причин для сохранения вашего int в качестве байта, если вы не собираетесь хранить так много из них так долго, что они заполнят ваше доступное пространство HEAP. Если вы просто храните их на несколько циклов для выполнения вычисления, вам, вероятно, не нужно хранить их в виде байта, так как они будут автоматически удалены GC, как только вы больше не будете их использовать.

Другой вариант, если вы собираетесь использовать одну и ту же группу в int снова и снова и хранить их в течение длительного периода времени, возможно, создать пул целых чисел. Делая это, вы можете создать пул из 1 миллиона уникальных целых чисел в памяти и просто сохранить указатель на этот Integer в памяти всякий раз, когда вы хотите выполнить вычисление с этим конкретным int. Это, вероятно, приведет к экономии места, чем сохранение каждого отдельного int в байтах в зависимости от вашего приложения ...

Не зная больше о вашем конкретном приложении, трудно рекомендовать конкретный курс действий. Не могли бы вы предоставить дополнительную информацию?

+0

Спасибо за ответ. Специального приложения нет.Я просто задавался вопросом об этой теории в целом. Я изучаю примитивные типы данных в университете и просто хочу быть настолько основательным в своем понимании их, насколько это возможно, в случае, если мне действительно нужно использовать байт или короткое когда-нибудь. –