Тип данных int в 64-битной JVM. Это более "неэффективно", чем долго? - PullRequest
2 голосов
/ 17 мая 2010

Я слышал, что использование short с в 32-битной системе просто более неэффективно, чем использование int с. Это то же самое для int с в 64-битной системе?

Недавно Python (?) В основном слился int s с long и имеет в основном один тип данных long, верно? Если вы уверены, что ваше приложение. тогда будет работать только на 64-битной версии, возможно ли вообще (потенциально хорошая идея) использовать долго для всего в Java?

Ответы [ 2 ]

2 голосов
/ 17 мая 2010

Если вы уверены, что ваше приложение. тогда будет работать только на 64-битной версии, возможно ли вообще (потенциально хорошая идея) использовать долго для всего в Java?

Плохая идея, ИМО

Даже если есть разница между использованием int и long на 64-битной JVM (что, как мне кажется, весьма сомнительно ), оно не будет достаточно значительным сверх все приложение, включая библиотеки, от которых вы зависите , чтобы гарантировать использование long для всего.

И есть некоторые потенциальные проблемы:

  • Вы будете использовать больше памяти, по крайней мере, для long[] против int[].
  • Вы пожалеете об этом, если ваше предположение о том, что никогда не нужно работать на 32-битной платформе, окажется неверным.

(Причина, по которой я думаю, что не будет существенной разницы в производительности, заключается в том, что проблема, если она есть, будет в извлечении и хранении невыровненных int-32. Но если это так, разработчики JVM, скорее всего, чтобы гарантировать, что поля int-32 всегда выровнены по адресам 64-битных слов. JVM обычно делают это уже с int-8 и int-16 на 32-битных архитектурах ...)

2 голосов

Python long имеет произвольную точность, он не 64-битный. Python 3 изменен с long на int, так что теперь есть только один целочисленный тип произвольной точности, это экономит много работы для программиста. Интеллект Java 32-битный, длинный 64-битный. 64-разрядный процессор может работать лучше, чем 32-разрядный процессор с 64-разрядным целым числом.

Использование 32-разрядных целых чисел на 64-разрядной платформе не дорого, по крайней мере, в x64. Нет смысла выбирать 32-битный или 64-битный тип int или наоборот в Java только по соображениям производительности. Если бы вы использовали два 32-разрядных типа int вместо одного 64-разрядного типа int, это было бы медленнее, несмотря ни на что. Точно так же, если вы используете 64-битную версию, в которой вы могли бы использовать 32-битную версию, она будет работать медленнее на некоторых платформах. Другими словами, используйте правильный тип данных для вашей проблемной области.

...