Совместимость Java 32-bit vs 64-bit
будет ли код Java, построенный и скомпилированный с 32-разрядным JDK в 32-разрядный байтовый код, работать в 64-разрядной JVM? Или 64-разрядная JVM требует 64-разрядного байтового кода?
чтобы дать немного больше деталей, у меня есть код, который работал в среде Solaris под управлением 32-разрядной JVM, но теперь я получаю проблемы после обновления JDK и Weblogic Server до 64-разрядной версии.
9 ответов:
да, байт-код Java (и исходный код) является независимым от платформы, если вы используете независимые от платформы библиотеки. 32 и 64 бит не имеет значения.
Я случайно запустил наше (largeish) приложение на 64-битной виртуальной машине, а не на 32-битной виртуальной машине и не заметил, Пока некоторые внешние библиотеки (вызванные JNI) не начали отказывать.
данные, сериализованные на 32-битной платформе, считывались на 64-битной платформе без каких-либо проблем.
какие проблемы вы получаете? Делать какие-то вещи работают, а не другие? Вы пробовали прикреплять помощью jconsole и т. д. и есть пик вокруг?
Если у вас очень большая виртуальная машина, вы можете найти, что Проблемы GC в 64-разрядной версии могут повлиять на вас.
" Да " на первый вопрос и нет на второй вопрос; это виртуальная машина. Ваши проблемы, вероятно, связаны с неопределенными изменениями в реализации библиотеки между версиями. Хотя это может быть, скажем, состязания.
есть некоторые обручи, через которые должна пройти виртуальная машина. Примечательно, что ссылки обрабатываются в файлах классов, как если бы они занимали то же пространство, что и
ints в стеке.doubleиlongвозьмите два опорных слота. Например поля, есть некоторые перестановка виртуальной машины обычно проходит в любом случае. Все это делается (относительно) прозрачно.также некоторые 64-разрядные JVMs используют "сжатые oops". Поскольку данные выровнены примерно на каждые 8 или 16 байт, три или четыре бита адреса бесполезны (хотя бит "метки" может быть украден для некоторых алгоритмов). Это позволяет 32-разрядным адресным данным (таким образом, используя половину пропускной способности и, следовательно, быстрее) использовать размеры кучи 35 - или 36-бит на 64-разрядной платформе.
все байт-код-это 8-разрядные. (Вот почему его называют байтовым кодом) все инструкции кратны 8-битному размеру. Мы разрабатываем на 32-битных машинах и запускаем наши серверы с 64-битной JVM.
не могли бы вы дать некоторые подробности проблемы, с которой вы столкнулись? Тогда у нас будет шанс помочь тебе. В противном случае мы бы просто догадались, в чем проблема у вас есть.
Если у вас нет собственного кода (машинный код, скомпилированный для конкретной arcitechture), ваш код будет одинаково хорошо работать в 32-разрядной и 64-разрядной JVM.
обратите внимание, однако, что из-за больших адресов (32-разрядный-4 байта, 64-разрядный-8 байт) 64-разрядная JVM потребует больше памяти, чем 32-разрядная JVM для той же задачи.
32-разрядная и 64-разрядная разница становится более важной, когда вы взаимодействуете с собственными библиотеками. 64-разрядная Java не сможет взаимодействовать с 32-разрядной не Java dll (через JNI)
добавить параметр, как показано ниже в вас в конфигурации при создании exe
Я надеюсь, что это помогает.
спасибо...
/jav
Java JNI требует библиотек ОС той же" биттности", что и JVM. Если вы попытаетесь построить что-то, что зависит, например, от IESHIMS.DLL (живет в %ProgramFiles%\Internet Explorer) вам нужно взять 32-битную версию, когда ваш JVM 32bit, 64-битную версию, когда ваш JVM 64bit. Так же и для других платформ.
кроме того, вы должны быть все готово. Сгенерированный байт-код Java s / b тот же.
обратите внимание, что вы должны использовать 64-битный компилятор Java для более крупные проекты, потому что он может адресовать больше памяти.
йо где не так! На эту тему я написал Вопрос к оракулу. Ответ был таков.
" Если вы компилируете свой код на 32-разрядной машине, ваш код должен работать только на 32-разрядном процессоре. Если вы хотите запустить свой код на 64-разрядной JVM, вам нужно скомпилировать файлы классов на 64-разрядной машине с помощью 64-разрядного JDK."
Comments