Gibt es ein JDK mit einem JIT-Compiler?

24

OpenJDK wird auf dem Pi erfolgreich kompiliert und ausgeführt, aber die einzige Version, die ich gefunden habe, ist eine ohne JIT. Oracle bietet ein solches JDK für andere Versionen von ARM an, jedoch nicht für ARMv6. Gibt es eine Möglichkeit, eine solche Version des JDK in der Zwischenzeit zum Laufen zu bringen?

berry120
quelle
Was ist die Distribution?
Jivings
Debian-Squeeze im Moment, obwohl ich nicht übermäßig viel Aufhebens darum mache, ob dies die Situation verbessern würde!
Berry120
Kannst du die OpenJDK-Version nicht im offiziellen Repo installieren?
Jivings
@Jivings Yup, das ist, was ich im Moment benutze. Aber diese Version kommt nicht mit einem JIT (daher die Frage!)
berry120
Sorry :) Ich habe keine Ahnung warum das dann kein JIT hat. Scheint eine seltsame Entscheidung zu sein. Hast du eine Begründung dafür gefunden?
Jivings

Antworten:

15

Oracle hat jetzt (ab Java 7u6) ein JDK mit JIT veröffentlicht, das auf dem Pi mit voller AWT / Swing-Unterstützung funktioniert. Es unterstützt auch JVMTI (Kakao hat nur teilweise Unterstützung.) Pressemitteilung hier .

Ich habe festgestellt, dass es mit Greenfoot funktioniert und im Vergleich zu einem einfachen OpenJDK-Build (ohne JIT) eine enorme Geschwindigkeitssteigerung bietet.

Zum Zeitpunkt des Schreibens unterstützt es keine harten Fließkommazahlen und funktioniert daher nicht mit Distributionen wie Raspbian, die nur harte Fließkommazahlen verwenden - dies ist jedoch für eine zukünftige Version geplant.

UPDATE: Wie Darren betonte, wurde jetzt eine Hard-Float-Version für ARM in Form eines JDK8-Preview-Releases veröffentlicht, das Sie hier finden .

UPDATE 2: Hard Float wird jetzt in JDK7 unterstützt.

berry120
quelle
Welche Distributionen werden unterstützt?
Zoot,
2
@Zoot Ich habe es mit Debian Squeeze verwendet - es sollte jede Linux-Distribution unterstützen, die softfloat verwenden kann.
Berry120
6

Das Paket icedtea-6-jre-cacao enthält einen JIT-Compiler und arbeitet angeblich mit dem RasPi .

Ich habe es nicht selbst ausprobiert.

finnw
quelle
Ist das nicht nur die JRE und nicht die JDK?
berry120
@ berry120: In der JRE wird die JIT benötigt. Es sollte keine Rolle spielen, ob beim Kompilieren des Programms eine JIT verwendet wurde.
14.
Ah, guter Punkt. Werde es versuchen :-)
berry120
1
Das Cacao JIT scheint nicht richtig zu funktionieren, zumindest auf Raspbian, und es scheint keine einfache Lösung zu geben.
Darren Wilkinson
4

Oracle hat jetzt eine Entwicklervorschau von Java JDK8 für ARM veröffentlicht, die speziell die Unterstützung von Raspbian auf dem Pi mit festem Float beinhaltet. Es funktioniert und ich habe festgestellt, dass es für bestimmte Gleitkomma-intensive Berechnungen etwa 20-mal schneller ist als OpenJDK. http://jdk8.java.net/fxarmpreview/

Darren Wilkinson
quelle
Du warst schneller als ich! Ich wollte das gerade posten :-)
berry120 20.12.12
3

Auf Rasbian können Sie JamVM verwenden, das eine "Code-Kopier-JIT" enthält.

apt-get install icedtea-7-jre-jamvm

JamVM ist derzeit die schnellste und stabilste JVM, die eine JIT für Rasbian enthält.

Avian wird auch auf Rasbian unterstützt, das auch eine JIT enthält. Sie müssen es manuell erstellen: http://labb.zafena.se/?p=630

Ich erwarte, dass Avian in Raspbian erscheint, wenn es aus der Debian SID-Quelle erstellt wurde. Avian existiert derzeit in Debian SID experimentell innerhalb des jvm-7-avian-jrePakets.

Sowohl Avian als auch JamVM arbeiten in Kombination mit den OpenJDK-7-Klassen, sodass Sie beide verwenden können, um alle Java-Startprogramme wie JavaC und Java zu beschleunigen. Die Datei /etc/java-7-openjdk/jvm-armhf.cfgbestimmt, welche JVM in openjdk 7 auf Rasbian standardmäßig verwendet wird.

Sie können den Java-Startern auch einzeln mitteilen, welche JVM verwendet werden soll:

java -jamvm

javac -J-jamvm
Xerxes Rånby
quelle
2

Oracle hat die Vollversion (keine Vorschau mehr) von Java 8 und Java 7 für die ARM-Architektur des Raspberry Pi veröffentlicht: Link zu Java 8 .

Sie können auch über die Befehlszeile Folgendes verwenden:

sudo apt-get update
sudo apt-get install oracle-java8-jdk
Simulant
quelle
1

Es ist möglich, OpenJDK 7 mit der JVM von Java JDK8 zu kombinieren, die eine JIT enthält, um ein Setup mit X11-Unterstützung und Swing / AWT-Funktion zu erhalten.

Die JNI-Schnittstelle trennt mit Ausnahme von "Classpath" die JVM- und die Laufzeitumgebungsklassen eindeutig. Wenn Sie den Client-Hotspot (jre / lib / arm / client / libjvm.so) aus der JavaFX 8-Vorschau in Kombination mit den von Rasbian kompilierten OpenJDK 7-Laufzeitumgebungsklassen und Java-Startprogrammen (/ usr / lib / jvm / java-7-) verwenden openjdk-armhf) erhalten Sie die folgenden Einstellungen und Vorteile:

  • Hotspot Client JIT (aus der JavaFX 8-Vorschau)
  • Swing / AWT-Unterstützung (unter Verwendung der OpenJDK-Klassen aus dem openjdk-7-jre-Paket)
  • Puls-Audio-Unterstützung (IcedTea Puls-Java aus den Paketen openjdk-7-jre und openjdk-7-jre-headless)
  • Webbrowser-Applet-Unterstützung mit icedtea-web (aus dem icedtea-7-Plugin-Paket)
  • einen JNLP-Javaws-Launcher mit icedtea-web (aus dem icedtea-7-Plugin-Paket)
  • Armhf-JNI-Autodetektion durch die OpenJDK-Java-Startprogramme (die OpenJDK-Java-Startprogramme fügen den armhf-spezifischen Systembibliothekspfad in java.library.path hinzu). Durch das Einfügen des Pfads / usr / lib / arm-linux-gnueabihf in java.library.path können Java-Bibliotheken wie die Pi4J-GPIO-Bibliothek und das JogAmp-Protokoll JOGL / JOAL erkennen, dass es auf einem armhf-Linux-System ausgeführt wird Laden Sie dann die armhf-JNI-Implementierung anstelle der armel-JNI-Implementierung.
  • Unterstützung für die Bildverarbeitung und das Drucken in JavaEE-Serveranwendungen wie Glassfish und Tomcat mithilfe der headfull OpenJDK-Klassen.

Installieren:

Laden Sie jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz von http://jdk8.java.net/fxarmpreview/index.html herunter

# 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
quelle