Разница между 32-битной и 64-битной версиями Java

В компьютерной архитектуре 64-битные вычисления — это использование процессоров, имеющих ширину пути данных, размер целого числа и ширину адресов памяти 64 бита(восемь октетов/байт). Кроме того, 64-битные архитектуры ЦП и АЛУ — это те, которые основаны на регистрах, адресных шинах или шинах данных такого размера. С точки зрения программного обеспечения 64-битные вычисления означают использование кода с 64-битными адресами виртуальной памяти. Аналогично, 32-битные вычисления, ЦП или 32-битное программирование используют 32 бита(четыре октета/байта) для всех вышеперечисленных целей.

Если вы перейдете на страницу загрузки Java, то увидите список различных установочных пакетов, упоминающих 32-битные пакеты или 64-битные пакеты для различных платформ, таких как Linux или Windows. Часто мы беспокоимся о том, какой пакет мы имеем право загрузить и установить в наших системах, чтобы наш код Java работал нормально. В этой статье я попытаюсь пролить свет на эти различные термины, а также ответить на некоторые очевидные вопросы.

Вы уже прочитали основную разницу между 64-битными и 32-битными вычислениями/архитектурами. Теперь давайте расширим наше понимание и углубимся в биты и байты.

1. Подробное понимание 32-битной архитектуры

Как вы, возможно, знаете, в любой 32-битной операционной системе вы ограничены 4096 МБ(4 ГБ) оперативной памяти. Это просто потому, что размер 32-битного значения не позволит больше ссылок в памяти.

232 = 4 294 967 296 т.е. примерно 4,29 ГБ

Итак, в 32-битной системе вы теоретически можете выделить до 4 ГБ памяти на процесс. Что нарушает это в Windows, так это то, как обрабатывается адресное пространство процесса. Windows урезает адресное пространство процесса пополам. Одна его половина зарезервирована для операционной системы(которую пользовательский процесс не может использовать), а другая половина — для пользователя. Неважно, сколько оперативной памяти в коробке, 32-битный процесс может использовать только 2 ГБ оперативной памяти. Что еще хуже — это адресное пространство должно быть непрерывным, поэтому на практике у вас часто остается всего 1,5–1,8 ГБ кучи на машинах Windows.

Технически подкованные читатели, возможно, знают, что современные чипы поддерживают PAE — процессорную технологию, которая позволяет операционной системе использовать немного больше памяти — до 64 ГБ, но для этого также требуется специальная поддержка приложений, которой большинство приложений не имеют или в которой не нуждаются.

Ограничение в 4 ГБ для Windows, по крайней мере, также является фактором лицензирования. Домашние версии 32-битной Windows, хотя технически и могут поддерживать PAE, имеют жесткое ограничение в 4 ГБ по причинам лицензирования и совместимости драйверов. Я указываю на «причины совместимости драйверов», поскольку некоторые конкретные приложения, которые активно используют собственные файлы(например, антивирусы), созданы специально для 32-битных/64-битных машин, а собственные файлы несовместимы с другими машинами.

Также следует помнить, что BIOS и другие микросхемы устройств на материнской плате, такие как видеокарты, также занимают часть памяти в том же пространстве объемом 4 ГБ, поэтому фактический объем памяти, доступный для использования вашими приложениями, сокращается еще больше — примерно до 1,5 ГБ.

2. Чем отличается 64-битная архитектура?

В то время как 32 бита информации могут получить доступ только к 4 ГБ оперативной памяти, 64-битная машина может получить доступ к 17,2 МИЛЛИАРДАМ ГБ системной памяти, по крайней мере, теоретически. Так что это должно устранить все барьеры потребления памяти в вашей системе, верно? Но это не так.

64-разрядные версии Windows Home по-прежнему ограничены 16 ГБ оперативной памяти [все из-за лицензионных требований], но версии Professional и Ultimate в настоящее время могут использовать до 192 ГБ оперативной памяти из-за различных проблем совместимости.

Ограничение на объем оперативной памяти для каждого процесса также значительно увеличено — в 64-битной Windows вместо ограничения в 2 ГБ каждое приложение может получить доступ к 8 ТБ виртуальной памяти без какой-либо специальной настройки(кроме того, она должна присутствовать в вашей системе). Это важный фактор при выборе следующей машины, когда вы рассматриваете такие приложения, как редактирование видео или виртуальные машины, которым может потребоваться использование огромных объемов оперативной памяти.

Итак, теперь у нас есть хорошее понимание 32-битных машин против 64-битных машин. Давайте сосредоточимся на вещах, которые в основном связаны с Java.

3. Какие версии устанавливать на 32-битные/64-битные машины?

Строго говоря, на машине с 32-битной архитектурой ЦП следует установить 32-битную java/JRE. С другой стороны, на машине с 64-битной архитектурой ЦП вы можете выбирать между 32-битной java/JRE и 64-битной java/JRE. Оба варианта будут работать нормально. Фактически, на 64-битной машине решение о версии JRE зависит от других факторов, таких как максимальный объем памяти, необходимый для запуска вашего приложения в сценариях с высокой нагрузкой.

3.1 Высокая доступность

Обратите внимание, что высокая доступность памяти не дается даром. Она имеет свою цену во время выполнения, например, на 30-50% больше кучи требуется на 64-битной архитектуре по сравнению с 32-битной. Почему? В основном из-за структуры памяти в 64-битной архитектуре.

Во-первых, заголовки объектов занимают 12 байт на 64-битной JVM. Во-вторых, ссылки на объекты могут быть как 4 байта, так и 8 байт, в зависимости от флагов JVM и размера кучи. Это определенно добавляет некоторые накладные расходы по сравнению с 8 байтами на заголовках на 32-битной и 4 байтами на ссылках.

3.2 Длинные паузы ГХ

Более длительные паузы при сборке мусора. Наращивание большего количества кучи означает, что GC придется выполнить больше работы, очищая неиспользуемые объекты.

В реальной жизни это означает, что вам следует быть особенно осторожным при создании куч размером более 12-16 ГБ. Без тонкой настройки и измерения вы можете легко ввести полные паузы GC, охватывающие несколько минут, что может привести к остановке шоу.

4. Можно ли использовать .class, созданный с помощью 32-битного компилятора, на 64-битной машине?

Абсолютно да. Байт-код Java независим от 32-битных или 64-битных систем. Вот почему говорят, что скомпилированный код Java должен быть исполняемым на «любой» системе. Помните, что только виртуальная машина компилируется для специальной архитектуры системы из-за некоторых собственных файлов, которые она имеет в упакованном пакете, а собственные файлы никогда не являются платформенно-независимыми.

Если так, то как 32-битные приложения работают на 64-битных системах? Ответ в том, что 64-битные системы включают в себя слой совместимости, называемый WoW64, который фактически переключает процессор между 32-битным и 64-битным режимами в зависимости от того, какой поток необходимо выполнить; заставляя 32-битное программное обеспечение работать гладко даже в 64-битной среде.

5. Каков максимальный объем оперативной памяти, возможный на 32-разрядной и 64-разрядной машине?

Как мы уже узнали о лимитах, разрешенных для обеих версий в предыдущем обсуждении в этом посте. На 64-битной системе теоретический лимит очень высок для любой конфигурации, доступной сегодня(17,2 МИЛЛИАРДА ГБ памяти). Тем не менее, существуют ограничения, налагаемые поставщиками для различных целей, которые в основном включают лицензирование и совместимость с другими собственными приложениями.

Аналогично, на 32-разрядной машине ограничение составляет 4 ГБ, а для пользовательских приложений фактически доступно только около 1,5 ГБ по причинам, указанным выше в посте.

Есть трюк, который вы можете использовать в 32-битных Windows, чтобы уменьшить пространство ядра и увеличить пространство пользователя. Вы можете использовать параметр /3GB в вашем boot.ini. Однако, чтобы фактически использовать эту возможность, JVM должна быть скомпилирована/скомпонована с использованием переключателя / LARGEADDRESSAWARE.

К сожалению, это не так, по крайней мере, с Hotspot JVM. До последних релизов JDK JVM не компилируется с этой опцией. Вам повезло больше, если вы работаете на jRockit в версиях после 2006 года. В этом случае вы можете наслаждаться размером кучи до 2,8-2,9 ГБ.

На этом все по этой теме. Пожалуйста, оставьте комментарий, если что-то непонятно или вы просто не согласны со мной.

Ссылки:

Прокрутить вверх