Ответ 1
Использование long
для int
вероятно, замедлит вас вообще.
Вы сразу заботитесь о том, требует ли int
для 64-битного процессора дополнительного времени обработки. Это очень маловероятно на современном конвейерном процессоре. Мы можем легко проверить это с помощью небольшой программы. Данные, которые он использует, должны быть достаточно малы, чтобы входить в кеш L1, поэтому мы проверяем эту конкретную проблему. На моей машине (64-битная Intel Core2 Quad) в принципе нет никакой разницы.
В реальном приложении большинство данных не может находиться в кэшах ЦП. Мы должны беспокоиться о загрузке данных из основной памяти в кеш, который относительно медленный и обычно является узким местом. Такая загрузка работает на единице "строк кэша", которая составляет 64 байта или более, поэтому загрузка одного long
или int
будет выполняться в одно и то же время.
Однако использование long
будет тратить драгоценное пространство кеша, поэтому кэш-промахи будут увеличиваться, что очень дорого. Явное пространство Java также подчеркивается, поэтому активность GC будет увеличиваться.
Мы можем продемонстрировать это, читая огромные массивы long[]
и int[]
с тем же количеством элементов. Они намного больше, чем могут содержать кеши. Длительная версия занимает больше времени на моей машине на 65%. Тест связан с пропускной способностью memory- > cache, а объем длинной [] памяти на 100% больше. (почему это не занимает 100% больше времени вне меня, очевидно, что другие факторы тоже играют)