Kompatybilność Java 32-bit vs 64-bit

Czy kod Javy zbudowany i skompilowany z 32-bitowego JDK do 32-bitowego kodu bajtowego będzie działał w 64-bitowym JVM? A może 64-bitowy JVM wymaga 64-bitowego kodu bajtowego?

Aby dać trochę więcej szczegółów, Mam kod, który działał w środowisku Solaris z 32-bitowym JVM, ale teraz dostaję problemy po aktualizacji JDK i WebLogic Server do 64-bit.

Author: Gregor, 2009-04-24

9 answers

Tak, kod bajtowy Javy (i Kod źródłowy) jest niezależny od platformy, zakładając, że używasz bibliotek niezależnych od platformy. 32 vs. 64 bit nie powinno mieć znaczenia.

 91
Author: Zifre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-23 21:50:37

Przypadkowo uruchomiłem naszą (dużą) aplikację na 64-bitowej maszynie wirtualnej, a nie na 32-bitowej maszynie wirtualnej.

Dane serializowane na platformie 32-bitowej były odczytywane na platformie 64-bitowej bez żadnych problemów.

Jakie masz problemy? Czy niektóre rzeczy działają, a nie inne? Czy próbowałeś dołączyć JConsole itp. i masz daszek wokół?

Jeśli masz bardzo dużą maszynę wirtualną, może się okazać, że problemy z GC w 64 bitach może mieć wpływ na Ciebie.

 20
Author: Fortyrunner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-23 21:59:07

Tak dla pierwszego pytania i nie dla drugiego pytania; to maszyna wirtualna. Twoje problemy są prawdopodobnie związane z nieokreślonymi zmianami w implementacji bibliotek między wersjami. Chociaż może to być, powiedzmy, stan rasy.

Są pewne obręcze, przez które musi przejść maszyna wirtualna. W szczególności odwołania są traktowane w plikach klas tak, jakby zajmowały taką samą przestrzeń jak int s na stosie. double i long zajmują dwa miejsca odniesienia. Na przykład fields, jest jakaś rearanżacja VM zazwyczaj i tak przechodzi. Wszystko to odbywa się (stosunkowo) przejrzyście.

Również niektóre 64-bitowe JVMs używają "skompresowanego oops". Ponieważ dane są wyrównane do około 8 lub 16 bajtów, trzy lub cztery bity adresu są bezużyteczne (chociaż bit "znacznika" może zostać skradziony dla niektórych algorytmów). Pozwala to na wykorzystanie 32-bitowych danych adresowych (dlatego przy użyciu o połowę większej przepustowości, a co za tym idzie szybszej) do używania sterty o rozmiarach 35 - lub 36-bitowych na platformie 64-bitowej.

 11
Author: Tom Hawtin - tackline,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-08 17:35:41

Cały kod bajtowy jest oparty na 8 bitach. (Dlatego nazywa się kod bajtowy) wszystkie instrukcje są wielokrotnością 8-bitowej wielkości. Rozwijamy się na maszynach 32-bitowych i uruchamiamy nasze serwery z 64-bitowym JVM.

Czy mógłbyś podać jakieś szczegóły problemu, z którym masz do czynienia? Wtedy będziemy mieli szansę ci pomóc. Inaczej zgadywalibyśmy, jaki masz problem.

 10
Author: Peter Lawrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-24 06:12:22

Jeśli nie masz kodu natywnego (kodu maszynowego skompilowanego dla konkretnej arcitechture), Twój kod będzie działał równie dobrze w 32-bitowym i 64-bitowym JVM.

Należy jednak zauważyć, że z powodu większych adresów (32-bit to 4 bajty, 64-bit to 8 bajtów) 64-bitowy JVM będzie wymagał więcej pamięci niż 32-bitowy JVM do tego samego zadania.

 8
Author: Thorbjørn Ravn Andersen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-24 08:15:11

Różnica 32-bitowa w porównaniu z 64-bitową staje się ważniejsza, gdy łączysz się z natywnymi bibliotekami. 64-bitowa Java nie będzie w stanie połączyć się z 32-bitową biblioteką DLL nie będącą Javą (poprzez JNI)

 3
Author: John Thomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-05 20:16:21

Dodaj parametr jak poniżej w konfiguracji podczas tworzenia exe

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

Mam nadzieję, że to pomoże.

Dzięki...

/ jav

 2
Author: javangelo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-10 05:09:17

Java JNI wymaga bibliotek OS o tej samej "goryczy" co JVM. Jeśli spróbujesz zbudować coś, co zależy np. od IESHIMÓW.DLL (mieszka w % ProgramFiles % \ Internet Explorer)musisz wziąć 32-bitową wersję, gdy JVM jest 32-bitowa, 64-bitowa wersja, gdy JVM jest 64-bitowa. Podobnie dla innych platform.

Poza tym, powinieneś być gotowy. Wygenerowany bajt Java s / b jest taki sam.

Zauważ, że powinieneś używać 64-bitowego kompilatora Javy dla większych projektów ponieważ może adresować więcej pamięci.

 0
Author: thecarpy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-31 10:42:33

Yo where wrong! Na ten temat napisałem pytanie do oracle. Odpowiedź brzmiała:

"jeśli skompilujesz kod na 32-bitowym komputerze, Twój kod powinien działać tylko na 32-bitowym procesorze. Jeśli chcesz uruchomić kod na 64-bitowym JVM, musisz skompilować pliki klas na 64-bitowym komputerze przy użyciu 64-bitowego JDK."

 -5
Author: elayer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-22 08:33:43