Akankah kode Java dibangun dan dikompilasi terhadap JDK 32-bit menjadi kode byte 32-bit berfungsi dalam JVM 64-bit? Atau apakah JVM 64-bit memerlukan kode byte 64-bit?
Untuk memberikan sedikit lebih banyak detail, saya memiliki kode yang bekerja di lingkungan Solaris yang menjalankan JVM 32-bit, tetapi sekarang saya mendapatkan masalah setelah memutakhirkan JDK dan Weblogic Server ke 64-bit.
Jawaban:
Ya, bytecode Java (dan kode sumber) adalah platform independen, dengan asumsi Anda menggunakan pustaka independen platform. 32 vs. 64 bit seharusnya tidak menjadi masalah.
sumber
javac
akan memanfaatkan memori yang tersedia dengan 64-bitjava
?Saya tidak sengaja menjalankan aplikasi (berukuran besar) kami pada VM 64bit daripada VM 32bit dan tidak menyadarinya sampai beberapa pustaka eksternal (disebut oleh JNI) mulai gagal.
Data yang diserialkan pada platform 32bit dibaca di platform 64bit tanpa masalah sama sekali.
Masalah apa yang Anda hadapi? Apakah beberapa hal berhasil dan tidak yang lainnya? Sudahkah Anda mencoba memasang JConsole dll dan mencapai puncaknya?
Jika Anda memiliki VM yang sangat besar, Anda mungkin menemukan bahwa masalah GC dalam 64 bit dapat memengaruhi Anda.
sumber
Ya untuk pertanyaan pertama dan tidak untuk pertanyaan kedua; itu mesin virtual. Masalah Anda mungkin terkait dengan perubahan yang tidak ditentukan dalam implementasi pustaka antar versi. Meskipun bisa dikatakan, kondisi balapan.
Ada beberapa rintangan yang harus dilalui VM. Terutama referensi diperlakukan dalam file kelas seolah-olah mereka mengambil ruang yang sama seperti
int
s di tumpukan.double
danlong
menggunakan dua slot referensi. Misalnya bidang, ada beberapa pengaturan ulang yang biasanya dilakukan VM. Ini semua dilakukan (secara relatif) secara transparan.Juga beberapa JVM 64-bit menggunakan "oops terkompresi". Karena data diselaraskan dengan sekitar setiap 8 atau 16 byte, tiga atau empat bit alamat tidak berguna (meskipun bit "tanda" mungkin dicuri untuk beberapa algoritme). Hal ini memungkinkan data alamat 32-bit (oleh karena itu menggunakan setengah bandwidth, dan karena itu lebih cepat) untuk menggunakan ukuran heap 35- atau 36-bit pada platform 64-bit.
sumber
Semua kode byte berbasis 8-bit. (Itulah mengapa disebut kode BYTE) Semua instruksi adalah kelipatan ukuran 8-bit. Kami mengembangkan pada mesin 32-bit dan menjalankan server kami dengan JVM 64-bit.
Bisakah Anda memberikan beberapa detail dari masalah yang Anda hadapi? Maka kami mungkin memiliki kesempatan untuk membantu Anda. Jika tidak, kami hanya akan menebak-nebak masalah apa yang Anda alami.
sumber
Kecuali Anda memiliki kode asli (kode mesin yang dikompilasi untuk arcitechture tertentu) kode Anda akan berjalan sama baiknya dalam JVM 32-bit dan 64-bit.
Namun, perhatikan bahwa karena alamat yang lebih besar (32-bit adalah 4 byte, 64-bit adalah 8 byte), JVM 64-bit akan membutuhkan lebih banyak memori daripada JVM 32-bit untuk tugas yang sama.
sumber
Perbedaan 32-bit vs 64-bit menjadi lebih penting saat Anda berinteraksi dengan pustaka asli. 64-bit Java tidak akan dapat terhubung dengan 32-bit non-Java dll (melalui JNI)
sumber
Tambahkan parameter seperti di bawah ini dalam konfigurasi Anda saat membuat exe
http://www.technimi.com/index.php?do=/group/java/forum/building-an-exe-using-launch4j-for-32-bit-jvm/
Saya harap ini membantu.
Terima kasih...
/ jav
sumber
Java JNI membutuhkan pustaka OS dengan "bittiness" yang sama seperti JVM. Jika Anda mencoba membuat sesuatu yang bergantung, misalnya, pada IESHIMS.DLL (ada di% ProgramFiles% \ Internet Explorer), Anda perlu mengambil versi 32-bit saat JVM Anda 32-bit, versi 64-bit ketika JVM Anda 64-bit. Begitu juga untuk platform lainnya.
Selain itu, Anda harus siap. Bytecode Java yang dihasilkan s / b sama.
Perhatikan bahwa Anda harus menggunakan compiler 64bit Java untuk proyek yang lebih besar karena dapat menangani lebih banyak memori.
sumber
yo dimana salah! Untuk tema ini saya menulis pertanyaan kepada oracle. Jawabannya adalah.
"Jika Anda mengkompilasi kode Anda pada Mesin 32 Bit, kode Anda seharusnya hanya berjalan pada Prosesor 32 Bit. Jika Anda ingin menjalankan kode Anda pada 64 Bit JVM Anda harus mengkompilasi file kelas Anda pada Mesin 64 Bit menggunakan 64 Bit. -Bit JDK. "
sumber