32-разрядная совместимость с 32-разрядными версиями по сравнению с 64-разрядной

Будет ли Java-код построен и скомпилирован с 32-разрядным JDK в 32-разрядный байт-код в 64-разрядной JVM? Или 64-разрядная JVM требует 64-битного байтового кода?

Чтобы дать немного больше деталей, у меня есть код, который работал в среде Solaris с 32-разрядной JVM, но теперь я получаю проблемы после обновления JDK и Weblogic Server до 64-разрядных.

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

Я случайно запустил наше (большое) приложение на 64-битной виртуальной машине, а не на 32-битной VM, и не заметил, пока некоторые внешние библиотеки (вызываемые JNI) не сработали.

Данные, сериализованные на 32-битной платформе, были прочитаны на 64-битной платформе без каких-либо проблем.

Какие проблемы вы получаете? Некоторые вещи работают, а не другие? Вы пытались подключить JConsole и т. Д. И иметь пик вокруг?

Если у вас очень большая виртуальная машина, вы можете обнаружить, что проблемы с GC в 64 бит могут повлиять на вас.

Да к первому вопросу, а не ко второму вопросу; это виртуальная машина. Вероятно, ваши проблемы связаны с неопределенными изменениями в реализации библиотеки между версиями. Хотя это может быть, скажем, состояние гонки.

Есть несколько обручей, которые должна пройти VM. В частности, ссылки обрабатываются в файлах classов, как если бы они занимали то же место, что и int s в стеке. double и long занимают два опорных слота. Например, поля, есть какая-то перегруппировка, которую VM обычно проходит в любом случае. Все это делается (относительно) прозрачно.

Кроме того, некоторые 64-разрядные JVM используют «сжатые oops». Поскольку данные выровнены примерно по 8 или 16 байт, три или четыре бита адреса бесполезны (хотя для некоторых алгоритмов может быть украден бит «отметки»). Это позволяет использовать 32-битные адресные данные (поэтому, используя половину полосы пропускания и, следовательно, быстрее) использовать размеры кучи 35 или 36 бит на 64-битной платформе.

Все байтовые коды основаны на 8 бит. (Вот почему его называемый код BYTE). Все инструкции имеют кратность 8 бит. Мы разрабатываем 32-битные машины и запускаем наши серверы с 64-разрядной JVM.

Не могли бы вы дать некоторые детали проблемы, с которой вы столкнулись? Тогда у нас может быть шанс помочь вам. В противном случае мы просто угадаем, в чем проблема.

Если у вас нет собственного кода (машинный код, скомпилированный для определенной дуги), ваш код будет работать одинаково хорошо в 32-битной и 64-разрядной JVM.

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

32-разрядная и 64-разрядная разница становится более важной, когда вы взаимодействуете с родными библиотеками. 64-битная Java не сможет взаимодействовать с 32-разрядной не-Java-dll (через JNI)

Добавьте параметр, как показано ниже, в конфигурации при создании exe

http://www.technimi.com/index.php?do=/group/java/forum/building-an-exe-using-launch4j-for-32-bit-jvm/

Я надеюсь, что это помогает.

благодаря…

/ яв

Java JNI требует, чтобы библиотеки ОС с той же «bittiness», что и JVM. Если вы попытаетесь создать что-то, что зависит, например, от IESHIMS.DLL (живет в% ProgramFiles% \ Internet Explorer), вам нужно взять 32-битную версию, когда ваша JVM – 32-битная, 64-битная версия, когда ваша JVM – 64-битная. Аналогично для других платформ.

Кроме того, вы должны быть настроены. Сгенерированный байт-код Java s / b одинаковый.

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

лет, где не так! На эту тему я написал вопрос oracleу. Ответ был.

«Если вы скомпилируете свой код на 32-битной машине, ваш код должен работать только на 32-битном процессоре. Если вы хотите запустить свой код на 64-битной JVM, вам нужно скомпилировать ваши файлы classов на 64-битной машине, используя 64-разрядную машину -Бит JDK.

Давайте будем гением компьютера.