Existe-t-il un JDK avec un compilateur JIT disponible?


24

OpenJDK se compile et s'exécute avec succès sur le Pi, mais la seule version que j'ai trouvée est une version sans JIT. Oracle fournit un tel JDK pour d'autres versions d'ARM, mais pas ARMv6. Existe-t-il un moyen de faire fonctionner une telle version du JDK en attendant?


Quelle est la distribution?
Jivings

Debian se serre pour le moment, bien que je ne sois pas trop inquiet de changer si cela pourrait aider la situation!
berry120

Ne pouvez-vous pas installer la version OpenJDK dans le dépôt officiel?
Jivings

@Jivings Yup, c'est ce que j'utilise en ce moment. Mais cette version ne vient pas avec un JIT (d'où la question!)
berry120

Désolé :) Je n'ai aucune idée pourquoi cela n'a pas JIT alors. Semble une décision étrange, avez-vous trouvé une justification à cela?
Jivings

Réponses:


15

Oracle a maintenant publié (à partir de Java 7u6) un JDK avec JIT qui fonctionne sur le Pi avec un support AWT / Swing complet. Il prend également en charge JVMTI (cacao n'a qu'un support partiel.) Communiqué de presse ici .

J'ai vérifié que cela fonctionne avec Greenfoot , et fournit une accélération énorme par rapport aux goûts d'une version OpenJDK simple (non JIT).

Au moment de l'écriture, il ne prend pas en charge les virgules flottantes dures, et ne fonctionnera donc pas avec des distributions comme Raspbian qui n'utilisent que des flottants durs - cela est cependant prévu pour une prochaine version.

MISE À JOUR: Comme l'a souligné Darren, une version flottante dure a maintenant été publiée pour ARM sous la forme d'une version préliminaire JDK8, vous pouvez la trouver ici .

MISE À JOUR 2: Le flottement dur est désormais pris en charge dans JDK7.


Quelles distributions prend-il en charge?
Zoot

2
@Zoot Je l'ai utilisé avec Debian squeeze fine - il devrait prendre en charge toute distribution Linux pouvant utiliser softfloat.
berry120

6

Le paquet icedtea-6-jre-cacao contient un compilateur JIT et fonctionnerait sur le RasPi .

Je ne l'ai pas essayé moi-même.


N'est-ce pas seulement le JRE plutôt que le JDK?
berry120

@ berry120: C'est dans le JRE que le JIT est nécessaire. Peu importe si un JIT était utilisé lors de la compilation du programme.
finnw

Ah, bon point. Je vais essayer :-)
berry120

1
Le cacao JIT ne semble pas fonctionner correctement, du moins sur Raspbian, et il ne semble pas y avoir de solution facile.
Darren Wilkinson

4

Oracle a maintenant publié un aperçu développeur de Java JDK8 pour ARM qui inclut spécifiquement la prise en charge de Raspbian flottant sur le Pi. Cela fonctionne, et je l'ai trouvé environ 20 fois plus rapide que OpenJDK pour certains calculs intensifs en virgule flottante. http://jdk8.java.net/fxarmpreview/


Tu m'as battu! J'étais sur le point de poster ça :-)
berry120

3

Sur Rasbian, vous pouvez utiliser JamVM qui inclut un "code-copying-JIT"

apt-get install icedtea-7-jre-jamvm

JamVM est actuellement la JVM la plus rapide et la plus stable qui inclut un JIT sur Rasbian.

Avian est également pris en charge sur Rasbian qui comprend également un JIT. Vous devrez le construire manuellement: http://labb.zafena.se/?p=630

Je m'attends à ce qu'Avian apparaisse dans Raspbian quand il a été construit à partir de la source Debian SID. Avian existe actuellement dans Debian SID experimental à l'intérieur dujvm-7-avian-jre paquet.

Avian et JamVM fonctionnent tous deux en combinaison avec les classes OpenJDK-7 afin que vous puissiez les utiliser tous les deux pour accélérer tous les lanceurs java tels que javac et java. le fichier/etc/java-7-openjdk/jvm-armhf.cfg détermine quelle machine virtuelle Java est utilisée par défaut dans openjdk 7 sur Rasbian.

Vous pouvez également indiquer aux lanceurs java individuellement quel jvm utiliser:

java -jamvm

javac -J-jamvm

2

Oracle a publié la version complète (plus d'aperçu) de Java 8 et Java 7 pour l'architecture ARM du Raspberry Pi: lien vers Java 8 .

Vous pouvez également utiliser à partir de la ligne de commande:

sudo apt-get update
sudo apt-get install oracle-java8-jdk

1

Il est possible de combiner OpenJDK 7 avec la JVM de Java JDK8 qui inclut un JIT pour obtenir une configuration avec X11 pris en charge et Swing / AWT fonctionnant.

L'interface JNI, à l'exception de "Classpath", sépare clairement la JVM et les classes d'environnement d'exécution. Si vous utilisez le point d'accès client (jre / lib / arm / client / libjvm.so) de l'aperçu JavaFX 8 en combinaison avec les classes d'environnement Runtime OpenJDK 7 compilées Rasbian et les lanceurs java (/ usr / lib / jvm / java-7- openjdk-armhf), vous obtiendrez la configuration et les avantages suivants:

  • Hotspot Client JIT (à partir de l'aperçu JavaFX 8)
  • Prise en charge Swing / AWT (en utilisant les classes OpenJDK du package openjdk-7-jre)
  • prise en charge de l'audio par impulsions (IcedTea pulse-java des packages openjdk-7-jre et openjdk-7-jre-headless)
  • prise en charge de l'applet de navigateur Web à l'aide d'icedtea-web (à partir du package icedtea-7-plugin)
  • un lanceur JNLP javaws utilisant icedtea-web (du paquet icedtea-7-plugin)
  • Détection automatique d'armhf JNI par les lanceurs Java OpenJDK (les lanceurs Java OpenJDK ajoutent le chemin d'accès à la bibliothèque système spécifique à armhf dans java.library.path). En incluant le chemin / usr / lib / arm-linux-gnueabihf dans java.library.path, les bibliothèques java telles que la bibliothèque Pi4J GPIO et JogAmp gluegen-rt JOGL / JOAL détectent correctement qu'elles s'exécutent sur un système armhf linux puis chargez l'implémentation armhf JNI au lieu de l'implémentation armel JNI.
  • Prise en charge du traitement et de l'impression d'images dans les applications serveur JavaEE, telles que glassfish et tomcat, en utilisant les classes OpenJDK complètes.

Installer:

Téléchargez jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz depuis 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.