È disponibile un JDK con un compilatore JIT?


24

OpenJDK compila ed esegue correttamente il Pi, ma l'unica versione che ho trovato è una senza JIT. Oracle fornisce tale JDK per altre versioni di ARM, ma non ARMv6. C'è un modo per ottenere una versione del JDK attiva e funzionante nel frattempo?


Qual è la distribuzione?
Jivings,

Debian al momento spremere, anche se non sono troppo preoccupato di cambiare se questo aiuterebbe la situazione!
berry120,

Non è possibile installare la versione OpenJDK nel repository ufficiale?
Jivings,

@Jivings Yup, è quello che sto usando al momento. Ma quella versione non ha un JIT (da qui la domanda!)
berry120,

Scusa :) Non ho idea del perché allora non abbia JIT. Sembra una decisione strana, hai trovato qualche logica per questo?
Jivings,

Risposte:


15

Oracle ha ora rilasciato (a partire da Java 7u6) un JDK con JIT che funziona sul Pi con pieno supporto AWT / Swing. Supporta anche JVMTI (il cacao ha solo un supporto parziale.) Comunicato stampa qui .

Ho verificato che funziona con Greenfoot e fornisce un enorme aumento di velocità rispetto a quelli simili a una build OpenJDK semplice (non JIT).

Al momento della stesura di questo documento non supporta il punto in virgola mobile e quindi non funzionerà con distribuzioni come Raspbian che utilizzano solo il float, ma è previsto per una versione futura.

AGGIORNAMENTO: Come ha sottolineato Darren, una versione float è stata rilasciata per ARM sotto forma di una versione di anteprima JDK8, la puoi trovare qui .

AGGIORNAMENTO 2: il float è ora supportato in JDK7.


Quali distribuzioni supporta?
Zoot

2
@Zoot L'ho usato bene con Debian Squeeze - dovrebbe supportare qualsiasi distribuzione Linux che può usare softfloat.
berry120,

6

Il icedtea-6-jre-cacao contiene un compilatore JIT e, a quanto si dice, funziona su RasPi .

Non l'ho provato da solo.


Ma non è solo JRE piuttosto che JDK?
berry120

@ berry120: è nella JRE che è necessaria la JIT. Non dovrebbe importare se un JIT era in uso al momento della compilazione del programma.
finnw,

Ah, buon punto. Ci proverò :-)
berry120

1
Il JIT di cacao non sembra funzionare correttamente, almeno su Raspbian, e non sembra esserci una soluzione semplice.
Darren Wilkinson,

4

Oracle ha ora rilasciato un'anteprima per sviluppatori di Java JDK8 per ARM che include specificamente il supporto per Raspbian su float per Pi. Funziona e l'ho trovato circa 20 volte più veloce di OpenJDK per alcuni calcoli intensivi in ​​virgola mobile. http://jdk8.java.net/fxarmpreview/


Mi hai battuto sul tempo! Stavo per pubblicare questo :-)
berry120,

3

Su Rasbian puoi usare JamVM che include un "code-copying-JIT"

apt-get install icedtea-7-jre-jamvm

JamVM è attualmente la JVM più veloce e stabile che include una JIT su Rasbian.

Avian è supportato anche su Rasbian che include anche una JIT. Dovrai costruirlo manualmente: http://labb.zafena.se/?p=630

Mi aspetto che Avian appaia in Raspbian quando è stato creato da sorgenti Debian SID. Avian attualmente esiste in Debian SID sperimentale all'interno del jvm-7-avian-jrepacchetto.

Sia Avian che JamVM funzionano in combinazione con le classi OpenJDK-7, quindi puoi usarle entrambe per accelerare tutti i lanciatori Java come Java e Java. il file/etc/java-7-openjdk/jvm-armhf.cfg determina quale JVM viene utilizzata per impostazione predefinita all'interno di openjdk 7 su Rasbian.

Puoi anche dire ai lanciatori Java singolarmente quale jvm usare:

java -jamvm

javac -J-jamvm

2

Oracle ha rilasciato la versione completa (non più anteprima) di Java 8 e Java 7 per l'architettura ARM di Raspberry Pi: collegamento a Java 8 .

Puoi anche usare dalla riga di comando:

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

1

È possibile combinare OpenJDK 7 con JVM da Java JDK8 che include un JIT per ottenere una configurazione con X11 supportato e Swing / AWT funzionante.

L'interfaccia JNI, con l'eccezione "Classpath", separa chiaramente le classi di ambiente JVM e runtime. Se si utilizza l'hotspot client (jre / lib / arm / client / libjvm.so) dall'anteprima di JavaFX 8 in combinazione con le classi di ambiente Runtime OpenJDK 7 compilate Rasbian e i lanciatori Java (/ usr / lib / jvm / java-7- openjdk-armhf) otterrai le seguenti impostazioni e vantaggi:

  • Hotspot Client JIT (dall'anteprima di JavaFX 8)
  • Supporto Swing / AWT (utilizzando le classi OpenJDK dal pacchetto openjdk-7-jre)
  • supporto pulse-audio (IcedTea pulse-java dal pacchetto openjdk-7-jre e openjdk-7-jre-headless)
  • supporto dell'applet per browser Web tramite icedtea-web (dal pacchetto icedtea-7-plugin)
  • un launcher javaws JNLP usando icedtea-web (dal pacchetto icedtea-7-plugin)
  • armhf Rilevamento automatico JNI da parte dei lanciatori Java OpenJDK (i lanciatori Java OpenJDK aggiungono il percorso della libreria di sistema specifica armhf in java.library.path). Includendo il percorso / usr / lib / arm-linux-gnueabihf in java.library.path consente le librerie java come la libreria GPIO Pi4J e la JOGLmp gluegen-rt JOGL / JOAL per rilevare correttamente che è in esecuzione su un sistema linux armhf e quindi caricare l'implementazione JNI armhf anziché l'implementazione JNI armel.
  • Supporto per l'elaborazione e la stampa di immagini all'interno di applicazioni server JavaEE, come glassfish e tomcat, utilizzando le classi OpenJDK headfull.

Impostare:

Scarica jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz da 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.