Должен ли я использовать 32-битный или 64-битный JDK?

Несколько лет назад я пробовал 64-битный JDK, но он был действительно глючным.

Как бы вы сказали, что это сейчас? Вы бы порекомендовали его? Должен ли я установить 64-битное JDK + eclipse или придерживаться 32-битного? Кроме того, существуют ли преимущества 64-битной над 32-бит, кроме обхода ограничения на 4 ГБ памяти?

Ответ 1

Только начните беспокоиться об этом, если хотите создать приложение, в котором будет использоваться большая часть памяти (а именно, куча размером более 2 ГБ).

Позвольте мне процитировать Red Hat:

Реальным преимуществом 64-битной JVM является то, что размеры кучи намного больше 2 ГБ. Большая память страниц с 64-разрядной JVM обеспечивает дальнейшую оптимизацию. На следующем графике показаны результаты с размерами кучи размером 4 ГБ с шагом в два гигабайта, до 20 ГБ.

Это, в симпатичном графике:

32 bit vs 64 bit JVMs in performance

См., нет большой разницы.

Подробнее (больше графиков, yay!) в: Настройка виртуальной машины Java

Ответ 2

Я думаю, что ответ можно найти довольно просто.

Ответьте на вопрос: "Нужно ли мне больше 4 ГБ ОЗУ?".

64-битная JVM такая же стабильная, как 32-разрядная JVM. Нет никаких различий. На самом деле Java-приложение, работающее в 64-битной JVM, будет потреблять больше ОЗУ по сравнению с 32-разрядной JVM. Для всех внутренних структур данных потребуется больше оперативной памяти.

My eclipse работает в 64-битной JVM.

Ответ 3

Собираетесь ли вы развертывать 32-разрядную или 64-разрядную среду? Если вы связаны с окружающей средой в производстве, ваша среда разработки должна использовать один и тот же тип среды.

Если вы новичок в платформе, идите с x64 и даже не задумывайтесь об этом. Платформа зрелая и стабильная. Это дает вам огромные возможности для увеличения масштаба, поскольку вы можете просто добавить память и сделать ваши кучи больше.

Никто не хочет рассказывать генеральному директору: "Извините, мы выбрали x86 и не можем масштабироваться, как мы надеялись. Это проект на месяц, который будет протестировать и заменить все для x64".

Ответ 4

Единственными отличиями между 32-битными и 64-битными сборками любой программы являются размеры машинных слов, количество адресной памяти и используемая операционная система ABI. С Java спецификация языка означает, что различия в размере машинного слова и OS ABI не должны иметь значения вообще, если вы не используете собственный код. (Родительский код должен быть построен так же, как размер слова JVM, который будет его загружать, вы не можете смешивать 32-битные и 64-битные сборки в одном и том же процессе без очень экзотического кодирования, и вы не должны " не делайте этого с Java.)

64-разрядная версия использует 64-разрядные указатели. Если у вас есть 4 ГБ + ОЗУ и запущены программы на Java, которые хранят 4 ГБ + структур данных в памяти, это будет соответствовать 64-бит. Большие указатели жира могут указывать на любой байт в пространстве памяти 4 ГБ +.

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