Apakah ada JDK dengan kompiler JIT tersedia?

24

OpenJDK berhasil mengkompilasi dan menjalankan Pi, tetapi satu-satunya versi yang saya temukan adalah versi tanpa JIT. Oracle menyediakan JDK untuk versi ARM lainnya, tetapi tidak untuk ARMv6. Apakah ada cara untuk mendapatkan versi JDK dan menjalankannya sementara itu?

berry120
sumber
Apa distronya?
Jivings
Debian memencet saat ini, meskipun aku tidak terlalu khawatir tentang perubahan jika ini akan membantu situasi!
berry120
Tidak bisakah Anda menginstal versi OpenJDK di repo resmi?
Jivings
@ Yiv, Yup, itulah yang saya gunakan saat ini. Tapi versi itu tidak datang dengan JIT (maka pertanyaannya!)
berry120
Maaf :) Saya tidak tahu mengapa itu tidak memiliki JIT. Tampaknya keputusan aneh, apakah Anda menemukan alasan untuk itu?
Jivings

Jawaban:

15

Oracle sekarang telah merilis (pada Java 7u6) JDK dengan JIT yang bekerja pada Pi dengan dukungan AWT / Swing penuh. Ini juga mendukung JVMTI (kakao hanya memiliki dukungan parsial.) Siaran pers di sini .

Saya telah memverifikasi bahwa ia bekerja dengan Greenfoot , dan memberikan kecepatan yang sangat besar dibandingkan dengan yang sejenis dengan build OpenJDK (non-JIT).

Pada saat penulisan ini tidak mendukung hard floating point, dan tidak akan bekerja dengan distribusi seperti Raspbian yang hanya menggunakan hard float - namun ini direncanakan untuk rilis di masa mendatang.

UPDATE: Seperti yang Darren tunjukkan, versi hard float kini telah dirilis untuk ARM dalam bentuk rilis preview JDK8, Anda dapat menemukannya di sini .

UPDATE 2: Hard float sekarang didukung di JDK7.

berry120
sumber
Distribusi mana yang didukungnya?
Zoot
2
@ Zoot Saya sudah menggunakannya dengan Debian squeeze fine - ini seharusnya mendukung distribusi Linux yang bisa menggunakan softfloat.
berry120
6

Paket icedtea-6-jre-cacao berisi kompiler JIT, dan dilaporkan bekerja pada RasPi .

Saya belum mencobanya sendiri.

menemukan
sumber
Apakah itu bukan hanya JRE daripada JDK?
berry120
@berry120: Dalam JRE dibutuhkan JIT. Seharusnya tidak masalah apakah JIT sedang digunakan saat program dikompilasi.
finnw
Ah, poin bagus. Akan mencobanya :-)
berry120
1
JIT kakao tampaknya tidak berfungsi dengan baik, setidaknya pada Raspbian, dan sepertinya tidak ada perbaikan yang mudah.
Darren Wilkinson
4

Oracle kini telah merilis pratinjau pengembang Java JDK8 untuk ARM yang secara khusus mencakup dukungan untuk Raspbian hard-float pada Pi. Ini berfungsi, dan saya telah menemukannya sekitar 20 kali lebih cepat daripada OpenJDK untuk perhitungan intensif floating point tertentu. http://jdk8.java.net/fxarmpreview/

Darren Wilkinson
sumber
Anda mengalahkan saya untuk itu! Saya baru saja akan memposting bahwa :-)
berry120
3

Pada Rasbian Anda dapat menggunakan JamVM yang mencakup "kode-menyalin-JIT"

apt-get install icedtea-7-jre-jamvm

JamVM saat ini adalah JVM tercepat dan paling stabil yang mencakup JIT pada Rasbian.

Avian juga didukung pada Rasbian yang juga mencakup JIT. Anda harus membuatnya secara manual: http://labb.zafena.se/?p=630

Saya berharap Avian muncul di Raspbian ketika telah dibangun dari sumber SID Debian. Avian saat ini ada dalam eksperimen Debian SID di dalam jvm-7-avian-jrepaket.

Baik Avian dan JamVM bekerja bersama dengan kelas OpenJDK-7 sehingga Anda dapat menggunakannya untuk mempercepat semua peluncur java seperti javac dan java. file /etc/java-7-openjdk/jvm-armhf.cfgmenentukan JVM mana yang akan digunakan secara default di dalam openjdk 7 pada Rasbian.

Anda juga dapat memberi tahu peluncur java secara terpisah mana yang akan digunakan:

java -jamvm

javac -J-jamvm
Xerxes Rånby
sumber
2

Oracle merilis Versi lengkap (tidak ada pratinjau lagi) Java 8 dan Java 7 untuk arsitektur ARM Raspberry Pi: tautan ke Java 8 .

Anda juga dapat menggunakan dari baris perintah:

sudo apt-get update
sudo apt-get install oracle-java8-jdk
Tiruan
sumber
1

Dimungkinkan untuk menggabungkan OpenJDK 7 dengan JVM dari Java JDK8 yang mencakup JIT untuk mendapatkan pengaturan dengan X11 yang didukung dan Swing / AWT berfungsi.

Antarmuka JNI, dengan pengecualian "Classpath", dengan jelas memisahkan kelas lingkungan JVM dan runtime. Jika Anda menggunakan Hotspot Klien (jre / lib / arm / client / libjvm.so) dari pratinjau JavaFX 8 dikombinasikan dengan Rasbian yang dikompilasi OpenJDK 7 kelas lingkungan Runtime dan peluncur java (/ usr / lib / jvm / java-7- openjdk-armhf) Anda akan mendapatkan pengaturan dan manfaat berikut:

  • JIT Hotspot Client (dari pratinjau JavaFX 8)
  • Dukungan swing / AWT (menggunakan kelas OpenJDK dari paket openjdk-7-jre)
  • dukungan pulsa-audio (IcedTea pulsa-java dari paket openjdk-7-jre dan openjdk-7-jre-headless)
  • dukungan applet web-browser menggunakan icedtea-web (dari paket icedtea-7-plugin)
  • launcher JNLP javaws menggunakan icedtea-web (dari paket icedtea-7-plugin)
  • armhf JNI autodeteksi oleh peluncur java OpenJDK (peluncur java OpenJDK menambahkan jalur pustaka sistem spesifik armhf ke java.library.path). Dengan menyertakan path / usr / lib / arm-linux-gnueabihf ke java.library.path memungkinkan perpustakaan java seperti perpustakaan Pi4J GPIO dan JogAmp gluegen-rt JOGL / JOAL untuk mendeteksi dengan benar bahwa ia berjalan pada sistem linux armhf dan kemudian memuat implementasi JNI armhf bukan implementasi JNI armel.
  • Pemrosesan gambar dan dukungan pencetakan dalam aplikasi server JavaEE, seperti glassfish dan tomcat, dengan menggunakan kelas OpenJDK headfull.

Mendirikan:

Unduh jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz dari http://jdk8.java.net/fxarmpreview/index.html

# Install openjdk-7 and the icedtea-web browser plugin
sudo apt-get install openjdk-7-jdk icedtea-7-plugin
# Extract the Oracle Client Hotspot JVM from the JavaFX 8 preview
tar --extract --verbose --file=jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz jdk1.8.0/jre/lib/arm/client
# Place the client hotspot dir containing the libjvm.so inside the OpenJDK 7 jre/lib/arm folder
sudo mv jdk1.8.0/jre/lib/arm/client /usr/lib/jvm/java-7-openjdk-armhf/jre/lib/arm/oracle
# Configure the OpenJDK Runtime to use the Oracle client Hotspot JVM dir
# This sed command places -oracle KNOWN at the first line of jvm-armhf.cfg
sudo sed -i -e "1i\\-oracle KNOWN" /etc/java-7-openjdk/jvm-armhf.cfg

java -version
java version "1.7.0_07" <--- This is the OpenJDK 7 Update version
OpenJDK Runtime Environment (IcedTea7 2.3.2) (7u7-2.3.2a-1+rpi1) <--- This is the   OpenJDK 7 Runtime version
Java HotSpot(TM) Client VM (build 25.0-b04, mixed mode) <--- This is the Oracle Client Hotspot JVM version
xranby
sumber