32 bitų suderinamumas su 32 bitų ir 64 bitų

Ar „Java“ kodas bus sukurtas ir kompiliuojamas su 32 bitų JDK į 32 bitų baitų kodą 64 bitų JVM? Ar 64 bitų JVM reikia 64 bitų baito kodo?

Norėdami pateikti šiek tiek išsamesnę informaciją, turiu kodą, kuris dirbo „Solaris“ aplinkoje su 32 bitų JVM, bet dabar turiu problemų po to, kai atnaujinote „JDK“ ir „Weblogic Server“ į 64 bitų.

95
24 апр. nustatė mshafrir balandžio 24 d 2009-04-24 00:48 '09 ne 0:48 2009-04-24 00:48
@ 9 atsakymai

Taip, „Java bytecode“ (ir šaltinio kodas) yra nepriklausoma nuo platformos, darant prielaidą, kad naudojate nepriklausomas platformų bibliotekas. 32 ir 64 bitai neturi reikšmės.

91
24 апр. atsakymas pateikiamas Zifre 24 d. 2009-04-24 00:50 '09 - 0:50 2009-04-24 00:50

Aš netyčia pradėjau (didelę) programą 64 bitų virtualioje mašinoje vietoj 32 bitų virtualios mašinos ir nepastebėjau, kad kai kurios išorinės bibliotekos (kurias sukėlė JNI) pradėjo katastrofos.

32 bitų platformoje serializuoti duomenys buvo perskaityti 64 bitų platformoje be jokių problemų.

Kokias problemas gaunate? Kai kurie dalykai veikia, o ne kiti? Bandėte prisijungti prie „JConsole“ ir tt Ir turėkite viršūnę?

Jei turite labai didelę virtualią mašiną, galite pastebėti, kad 64 bitų GC problemos gali jus paveikti.

20
24 апр. atsakymą pateikė „ Fortyrunner“ 24 d. 2009-04-24 00:59 '09 ne 0:59 2009-04-24 00:59

Taip, į pirmąjį klausimą, o ne antrąjį klausimą; tai virtuali mašina. Tikriausiai jūsų problemos yra susijusios su neaiškiais bibliotekos diegimo pokyčiais tarp versijų. Nors tai gali būti, pavyzdžiui, lenktynių būklė.

Yra keli lankai, kuriuos turi eiti VM. Visų pirma, nuorodos yra apdorojamos klasės rinkmenose taip, lyg jos užimtos toje pačioje vietoje, kaip int . double ir long užima du atskaitos taškai. Pavyzdžiui, laukai, yra tam tikra pergrupavimo rūšis, kaip taisyklė, eina per VM. Visa tai daroma (palyginti) skaidriai.

Taip pat kai kurie 64 bitų „JVM“ naudojami „suspaustiems Oops“. Kadangi duomenys yra suderinti maždaug 8 ar 16 baitų, trys ar keturi adresų bitai yra nenaudingi (nors kai kuriems algoritmams gali būti pavogtas „ženklas“ bitas). Tai leidžia naudoti 32 bitų adresų duomenis (todėl, naudojant pusę dažnių juostos pločio ir todėl greičiau) naudoti 64 arba 36 bitų dydžius 64 bitų platformoje.

11
24 апр. Atsakyti Tom Hawtin - tackline 24 Bal 2009-04-24 00:52 '09 ne 0:52 2009-04-24 00:52

Visi baitų kodai yra pagrįsti 8 bitais. (Štai kodėl jis vadinamas BYTE kodu). Visos instrukcijos yra 8 bitų pločio. Mes vystome 32 bitų mašinas ir valdome serverius 64 bitų JVM.

Ar galėtumėte pateikti išsamią informaciją apie problemą, su kuria susiduriate? Tada mes galime jums padėti. Priešingu atveju, mes tiesiog atspėjome, kokia problema jums yra.

10
24 апр. Peter Lawrey atsakymas, pateiktas balandžio 24 d 2009-04-24 09:12 '09 9:12 val. 2009-04-24 09:12

Jei neturite savo kodo (mašininio kodo, sukomponuoto tam tikram lankui), jūsų kodas veiks vienodai gerai 32 bitų ir 64 bitų JVM.

Atminkite, kad dėl didelių adresų (32 bitų yra 4 baitai, 64 bitų yra 8 baitai), 64 bitų JVM reikės daugiau atminties nei 32 bitų JVM tam pačiam uždaviniui.

8
24 апр. Atsakymas suteikta Thorbjørn Ravn Andersen 24 Bal. 2009-04-24 11:15 '09 11:15 val. 2009-04-24 11:15

32 bitų ir 64 bitų skirtumai tampa svarbesni, kai bendraujate su vietinėmis bibliotekomis. 64 bitų „Java“ negalės bendrauti su 32 bitų ne „Java“ dll (per JNI)

3
05 сент. John Thomas atsakymas rugsėjo 05 d 2012-09-05 23:16 '12, 23:16, 2012-09-05 23:16

Jei norite sukurti exe, pridėkite konfigūracijos parametrą, kaip parodyta toliau

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

Tikiuosi, kad tai padės.

ačiū ...

/ jav

2
10 нояб. atsakymas duotas javangelo 10 Lap. 2010-11-10 08:09 '10, 08:09, 2010-11-10 08:09

„Java JNI“ reikalauja, kad OS bibliotekos, turinčios tą patį „bittiness“ kaip JVM. Jei bandote sukurti kažką, kuris priklauso, pvz., IESHIMS.DLL (gyvena% ProgramFiles% Internet Explorer), turite gauti 32 bitų versiją, kai JVM yra 32 bitų, 64 bitų versija, kai JVM yra 64 bitų. Panašiai ir kitose platformose.

Be to, turite būti pritaikyti. Sukurtas „Java“ s / b bytecode yra tas pats.

Atkreipkite dėmesį, kad didesniems projektams turite naudoti 64 bitų „Java“ kompiliatorių, nes jis gali spręsti daugiau atminties.

0
31 июля '15 в 13:42 2015-07-31 13:42 atsakymas pateikiamas liepos 31 d. 15 val. 13:42 2015-07-31 13:42

yo kur blogai Šiuo klausimu aš parašiau klausimą orakului. Atsakymas buvo.

„Jei kodą sukompiliuosite 32 bitų įrenginyje, jūsų kodas turėtų veikti tik 32 bitų procesoriuje. Jei norite paleisti kodą 64 bitų JVM, turite rinkti 64 bitų įrenginio klasės failus 64 bitų JDK. "

-5
22 мая '11 в 11:33 2011-05-22 11:33 atsakymą pateikė elayer , gegužės 22 d. 11 val. 11:33 2011-05-22 11:33