¿Hay un JDK con un compilador JIT disponible?


24

OpenJDK compila y se ejecuta en Pi con éxito, pero la única versión que he encontrado es una sin JIT. Oracle proporciona tal JDK para otras versiones de ARM, pero no ARMv6. ¿Hay alguna forma de tener una versión de JDK en funcionamiento mientras tanto?


¿Cuál es la distribución?
Jivings

¡Apriete de Debian en este momento, aunque no estoy demasiado preocupado por cambiar si esto ayudaría a la situación!
berry120

¿No puedes instalar la versión OpenJDK en el repositorio oficial?
Jivings

@ Jivings Sí, eso es lo que estoy usando en este momento. Sin embargo, esa versión no viene con un JIT (de ahí la cuestión!)
berry120

Lo siento :) No tengo idea de por qué eso no tiene JIT entonces. Parece una decisión extraña, ¿has encontrado alguna razón para ello?
Jivings

Respuestas:


15

Oracle ha lanzado ahora (a partir de Java 7u6) un JDK con JIT que funciona en el Pi con soporte completo AWT / Swing. También es compatible con JVMTI (el cacao solo tiene soporte parcial). Comunicado de prensa aquí .

Verifiqué que funciona con Greenfoot y proporciona una gran aceleración en comparación con los gustos de una compilación OpenJDK simple (no JIT).

En el momento de escribir esto, no admite punto flotante duro, por lo que no funcionará con distribuciones como Raspbian que solo usan flotación dura; sin embargo, esto está planeado para un lanzamiento futuro.

ACTUALIZACIÓN: Como señaló Darren, ahora se ha lanzado una versión de flotación dura para ARM en forma de una versión preliminar de JDK8, puede encontrarla aquí .

ACTUALIZACIÓN 2: el flotador duro ahora es compatible con JDK7


¿Qué distribuciones admite?
Zoot

2
@Zoot Lo he usado con Debian squeeze fine: debería admitir cualquier distribución de Linux que pueda usar softfloat.
berry120

6

El paquete icedtea-6-jre-cacao contiene un compilador JIT y, según los informes, funciona en RasPi .

No lo he probado yo mismo.


¿No es eso solo el JRE en lugar del JDK?
berry120

@ berry120: Es en el JRE donde se necesita el JIT. No debería importar si un JIT estaba en uso cuando se compiló el programa.
finnw

Ah, buen punto. Lo intentaré :-)
berry120

1
El JIT de cacao no parece funcionar correctamente, al menos en Raspbian, y no parece haber una solución fácil.
Darren Wilkinson

4

Oracle ha lanzado una vista previa para desarrolladores de Java JDK8 para ARM que incluye específicamente soporte para Raspbian en Pi. Funciona, y he descubierto que es aproximadamente 20 veces más rápido que OpenJDK para ciertos cálculos intensivos de coma flotante. http://jdk8.java.net/fxarmpreview/


¡Me ganaste! Estaba a punto de publicar eso :-)
berry120

3

En Rasbian puede usar JamVM que incluye un "código-copia-JIT"

apt-get install icedtea-7-jre-jamvm

JamVM es actualmente el JVM más rápido y estable que incluye un JIT en Rasbian.

Avian también es compatible con Rasbian que también incluye un JIT. Deberá construirlo manualmente: http://labb.zafena.se/?p=630

Espero que Avian aparezca en Raspbian cuando se ha creado a partir de la fuente SID de Debian. Avian actualmente existe en Debian SID experimental dentro del jvm-7-avian-jrepaquete.

Tanto Avian como JamVM funcionan en combinación con las clases OpenJDK-7, por lo que puede usarlos para acelerar todos los lanzadores de java como javac y java. el archivo /etc/java-7-openjdk/jvm-armhf.cfgdetermina qué JVM se usa por defecto dentro de openjdk 7 en Rasbian.

También puede indicar a los lanzadores de Java individualmente qué jvm usar:

java -jamvm

javac -J-jamvm

2

Oracle lanzó la versión completa (ya no es una vista previa) de Java 8 y Java 7 para la arquitectura ARM de Raspberry Pi: enlace a Java 8 .

También puede usar desde la línea de comandos:

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

1

Es posible combinar OpenJDK 7 con JVM de Java JDK8 que incluye un JIT para obtener una configuración compatible con X11 y Swing / AWT funcionando.

La interfaz JNI, con la excepción "Classpath", separa claramente las clases de entorno JVM y runtime. Si utiliza el punto de acceso del cliente (jre / lib / arm / client / libjvm.so) de la vista previa de JavaFX 8 en combinación con las clases de entorno de tiempo de ejecución OpenJDK 7 compiladas en Rasbian y los lanzadores de Java (/ usr / lib / jvm / java-7- openjdk-armhf) obtendrá la siguiente configuración y beneficios:

  • HITpot Client JIT (de la vista previa de JavaFX 8)
  • Soporte Swing / AWT (usando las clases OpenJDK del paquete openjdk-7-jre)
  • soporte de audio de pulso (IcedTea pulse-java del paquete openjdk-7-jre y openjdk-7-jre-headless)
  • soporte de applet de navegador web usando icedtea-web (del paquete icedtea-7-plugin)
  • Un lanzador Java JNLP usando icedtea-web (del paquete icedtea-7-plugin)
  • La detección automática de armhf JNI por los lanzadores Java OpenJDK (los lanzadores Java OpenJDK agrega la ruta de la biblioteca del sistema específico de Armhf en java.library.path). Al incluir la ruta / usr / lib / arm-linux-gnueabihf en java.library.path, permite que las bibliotecas java como la biblioteca Pi4J GPIO y JogAmp gluegen-rt JOGL / JOAL detecten correctamente que se está ejecutando en un sistema armhf linux y luego cargue la implementación JNI armhf en lugar de la implementación JNI armel.
  • Procesamiento de imágenes y soporte de impresión dentro de aplicaciones de servidor JavaEE, como glassfish y tomcat, utilizando las clases principales de OpenJDK.

Preparar:

Descargue jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz desde 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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.