Работает ли 64-битная версия Java лучше, чем 32-битная версия? - PullRequest
16 голосов
/ 26 февраля 2009

Я заметил Sun предоставляет 64-битную версию Java. Работает ли он лучше, чем 32-битная версия?

Ответы [ 8 ]

18 голосов
/ 26 февраля 2009

Почти всегда 64 бита будут медленнее.

Цитировать Sun из HotSpot FAQ :

Сравнение разницы в производительности приложение работает на 64-битной Платформа против 32-битной платформы на SPARC составляет порядка 10-20% деградация при переходе на 64-битную VM. На платформах AMD64 и EM64T это разница составляет от 0 до 15% в зависимости на сумму обращения указателя ваше приложение выполняет.

Более подробная информация по ссылке.

12 голосов
/ 26 февраля 2009

Определите свою рабочую нагрузку и то, что для вас значит «выполнить».

Это своего рода досадное раздражение для меня, как давнего гика производительности. То, что конкретное изменение «работает лучше» или нет, зависит, прежде всего, от рабочей нагрузки, т. Е. От того, что вы просите сделать программу.

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

3 голосов
/ 26 февраля 2009

64-бит работает лучше, если вам нужно гораздо больше, чем 1,2 ГБ. На некоторых платформах вы можете получить до 3 ГБ, но если вы хотите, например, 4 - 384 ГБ, 64-битный вариант - ваш единственный вариант.

Я считаю, что Azul поддерживает JVM на 384 ГБ, кто-нибудь знает, можно ли подняться выше?

2 голосов
/ 28 июня 2018

Я знаю, что этот вопрос довольно старый, и проголосовавшие ответы, вероятно, были правильными в то время, когда они были написаны. Но сейчас, в 2018 году, все изменилось.

У меня только что возникла проблема с клиентским приложением Java, работающим на Win 10 64Bit на Java 8 32Bit JVM. Он считывал 174 МБ данных с HttpsURLConnection * InputStream за 26 с , что ужасно медленно. Доказано, что причиной этого не являются сервер и сеть.

Думая: «Эй, между 32-битной и 64-битной JRE не может быть огромной разницы» потребовалось некоторое время, пока я не попытался выполнить тот же код, выполняемый 64-битной JVM. К счастью, в итоге я сделал это: он читал те же самые 174MB за 5 с !

Я не знаю, смогу ли я сделать это еще быстрее, но ключевой момент заключается в следующем:

  • jre1.8.0_172 32Bit: 6,692 МБ / с
  • jre1.8.0_172 64 бит: 34,8 МБ / с

для очень того же файла jar, выполняемого в Windows 10 64Bit.

Я понятия не имею, что может быть причиной этого, но я могу ответить на этот вопрос: «Да, 64-битная Java лучше, чем 32-битная Java». См. Также цифры в ответе на мой вопрос относительно этой проблемы.

2 голосов
/ 26 февраля 2009

Некоторые улучшения: операции с двойными числами на 64 битах вычисляются одинаково быстро, как операции с 32-разрядными числами, а также операции с длинными значениями на 64 битах по сравнению с int.

Так что, если вы выполняете код с тоннами длинных, вы можете увидеть реальное улучшение.

2 голосов
/ 26 февраля 2009

В большинстве архитектур ЦП 32-битные быстрее, чем 64-битные, при прочих равных. Для 64-битных указателей требуется вдвое большая полоса пропускания, чем для 32-битных Тем не менее, архитектура набора команд x64 добавляет здравомыслие к x86, так что в итоге получается быстрее. Количество обработки длинных типов обычно невелико.

Конечно, это также зависит от реализации Java. Как и компилятор, вы можете найти различия в реализации; например, NIO предполагает использование 64-битных указателей. Также обратите внимание, что ранее Sun поставляла только более быструю реализацию сервера HotSpot для x64. Это означало, что если вы укажете -d64, вы также переключитесь с клиента на сервер HotSpot, IIRC.

1 голос
/ 17 октября 2017

Мой опыт отличается от других ответов.

Java 64bit может быть быстрее, чем 32bit . По крайней мере, с моими тестами так было всегда! Аргумент указателя недопустим, если используется менее 4 ГБ, потому что тогда 64-битная виртуальная машина также будет использовать короткие указатели внутри. Однако вы получаете более быстрый набор команд 64-битных процессоров!

Я проверил это с Windows 7 и JDE1.8.0_144, но, возможно, настоящая причина - разные внутренние настройки JVM. При использовании 64-разрядной виртуальной машины Java она запускается в режиме «сервер», а 32-разрядная виртуальная машина запускается в режиме «клиент».

0 голосов
/ 26 февраля 2009

Да, особенно если ваш код создан для 64-битной платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...