32-разрядная совместимость с 32-разрядными версиями по сравнению с 64-разрядной
Будет ли Java-код построен и скомпилирован с 32-разрядным JDK в 32-разрядный байт-код в 64-разрядной JVM? Или 64-разрядная JVM требует 64-битного байтового кода?
Чтобы дать немного больше деталей, у меня есть код, который работал в среде Solaris с 32-разрядной JVM, но теперь я получаю проблемы после обновления JDK и Weblogic Server до 64-разрядных.
- Является ли перекрестное происхождение postMessage сломанным в IE10?
- Эффективная максимальная длина письма: длина тела
- Возможно ли запустить приложение .NET 4.5 на XP?
- Фрагменты onResume из заднего стека
- Можно ли скомпилировать код Java 8 для работы на Java 7 JVM?
- Несовместимое магическое значение 1008813135
- Gradle sourceCompatibility не влияет на подпроекты
- Был ли PreferenceFragment намеренно исключен из пакета совместимости?
- Как сделать Internet Explorer 8 для поддержки элемента nth child () CSS?
- Как сделать iPhone-приложение совместимым с несколькими версиями SDK (прошивки)
- Как установить режим документа IE11 на край по умолчанию?
- Неинициализированная константа ActiveSupport :: Зависимости :: Mutex (NameError)
- Режим IE11 Document по умолчанию имеет значение IE7. Как сбросить?
Да, байт-код 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
Я надеюсь, что это помогает.
благодаря…
/ яв
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.