Existe um JDK com um compilador JIT disponível?


24

O OpenJDK compila e roda com êxito no Pi, mas a única versão que encontrei é uma sem JIT. A Oracle fornece esse JDK para outras versões do ARM, mas não o ARMv6. Existe alguma maneira de colocar em funcionamento essa versão do JDK?


Qual é a distribuição?
Jivings

O Debian está atualmente apertado, embora eu não esteja muito preocupado em mudar se isso ajudaria a situação!
berry120

Você não pode instalar a versão do OpenJDK no repositório oficial?
Jivings

@ Jivings Sim, é isso que estou usando no momento. Mas essa versão não vem com um JIT (daí a pergunta!)
berry120

Desculpe :) Eu não tenho idéia do por que isso não tem JIT então. Parece uma decisão estranha, você encontrou alguma justificativa para isso?
Jivings

Respostas:


15

A Oracle lançou agora (a partir do Java 7u6) um JDK com JIT que funciona no Pi com suporte completo ao AWT / Swing. Ele também suporta JVMTI (cacau tem apenas suporte parcial.) Comunicado de imprensa aqui .

Eu verifiquei que ele funciona com o Greenfoot e fornece uma enorme aceleração em comparação com os gostos de uma compilação OpenJDK simples (sem JIT).

No momento da escrita, ele não suporta ponto flutuante rígido e, portanto, não funciona com distribuições como o Raspbian que usam apenas flutuador rígido - no entanto, isso está planejado para uma versão futura.

ATUALIZAÇÃO: Como Darren apontou, uma versão hard float foi lançada para o ARM na forma de uma versão prévia do JDK8, você pode encontrá-la aqui .

ATUALIZAÇÃO 2: O float rígido agora é suportado no JDK7.


Quais distribuições ele suporta?
214 Zoot

2
@Zoot Eu usei com o Debian squeeze fine - ele deve suportar qualquer distribuição Linux que possa usar o softfloat.
berry120

6

O pacote icedtea-6-jre-cacao contém um compilador JIT e, segundo consta, funciona no RasPi .

Eu não tentei eu mesmo.


Mas isso não é apenas o JRE, e não o JDK?
berry120

@ berry120: É no JRE que o JIT é necessário. Não importa se um JIT estava em uso quando o programa foi compilado.
finnw

Ah, bom argumento. Vai dar-lhe uma tentativa :-)
berry120

11
O JIT do cacau não parece funcionar corretamente, pelo menos no Raspbian, e não parece ser uma solução fácil.
Darren Wilkinson

4

A Oracle lançou agora uma visualização do desenvolvedor do Java JDK8 for ARM, que inclui especificamente suporte para Raspbian no Pi. Funciona e eu achei que era cerca de 20 vezes mais rápido que o OpenJDK para certos cálculos intensivos de ponto flutuante. http://jdk8.java.net/fxarmpreview/


Você chegou antes de mim! Eu estava prestes a post que :-)
berry120

3

No Rasbian, você pode usar o JamVM que inclui um "JIT de cópia de código"

apt-get install icedtea-7-jre-jamvm

Atualmente, o JamVM é a JVM mais rápida e estável que inclui um JIT no Rasbian.

O Avian também é suportado no Rasbian, que também inclui um JIT. Você terá que construí-lo manualmente: http://labb.zafena.se/?p=630

Espero que o Avian apareça no Raspbian quando ele tiver sido construído a partir da fonte SID do Debian. Atualmente, as aves existem no SID experimental do Debian dentro do jvm-7-avian-jrepacote.

O Avian e o JamVM trabalham em conjunto com as classes OpenJDK-7, para que você possa usá-los para acelerar todos os lançadores java, como javac e java. o arquivo /etc/java-7-openjdk/jvm-armhf.cfgdetermina qual JVM é usada por padrão no openjdk 7 no Rasbian.

Você também pode dizer aos lançadores java individualmente qual jvm usar:

java -jamvm

javac -J-jamvm

2

A Oracle lançou a versão completa (sem pré-visualização) do Java 8 e Java 7 para a arquitetura ARM do Raspberry Pi: link para o Java 8 .

Você também pode usar na linha de comando:

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

1

É possível combinar o OpenJDK 7 com a JVM do Java JDK8 que inclui um JIT para obter uma configuração com suporte ao X11 e funcionamento do Swing / AWT.

A interface JNI, com a exceção "Classpath", separa claramente a JVM e as classes do ambiente de tempo de execução. Se você usar o Hotspot do cliente (jre / lib / arm / client / libjvm.so) da visualização do JavaFX 8 em combinação com as classes de ambiente OpenJDK 7 Runtime compiladas pelo Rasbian e os lançadores de java (/ usr / lib / jvm / java-7- openjdk-armhf), você obterá as seguintes configurações e benefícios:

  • Cliente de ponto de acesso JIT (da visualização do JavaFX 8)
  • Suporte Swing / AWT (usando as classes OpenJDK do pacote openjdk-7-jre)
  • suporte pulse-audio (IcedTea pulse-java dos pacotes openjdk-7-jre e openjdk-7-jre-headless)
  • suporte a applet de navegador da web usando o icedtea-web (do pacote icedtea-7-plugin)
  • um iniciador de javaws JNLP usando icedtea-web (do pacote icedtea-7-plugin)
  • detecção automática de JNI armhf pelos lançadores java OpenJDK (os lançadores java OpenJDK adicionam o caminho específico da biblioteca do sistema armhf em java.library.path). Ao incluir o caminho / usr / lib / arm-linux-gnueabihf no java.library.path, as bibliotecas java, como a biblioteca Pi4J GPIO e o JOGL / JOAL gluegen-rt JogAmp, detectam corretamente que estão em execução em um sistema linh armhf e, em seguida, carregue a implementação JNI armhf em vez da implementação JNI armel.
  • Suporte para processamento de imagem e impressão em aplicativos de servidor JavaEE, como glassfish e tomcat, usando as classes OpenJDK.

Configuração:

Faça o download do jdk-8-e-b36e-linux-arm-hflt-29_nov_2012.tar.gz em 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.