OpenJDK可以成功在Pi上编译并运行,但是我发现的唯一版本是没有JIT的版本。Oracle为其他版本的ARM(而非ARMv6)提供了这样的JDK。有什么方法可以同时启动并运行这种版本的JDK?
OpenJDK可以成功在Pi上编译并运行,但是我发现的唯一版本是没有JIT的版本。Oracle为其他版本的ARM(而非ARMv6)提供了这样的JDK。有什么方法可以同时启动并运行这种版本的JDK?
Answers:
Oracle现在已经发布了(从Java 7u6开始)带有JIT的JDK,该JDK可在具有完全AWT / Swing支持的Pi上运行。它还支持JVMTI(可可仅部分支持。)此处的新闻稿。
我已经验证了它可以与Greenfoot一起使用,并且与普通的(非JIT)OpenJDK构建相比,它提供了巨大的加速。
在撰写本文时,它不支持硬浮点,因此不适用于仅使用硬浮点的Raspbian发行版-但是计划在将来的发行版中使用。
更新:正如Darren所指出的那样,现已以JDK8预览版本的形式为ARM发布了一个硬浮点版本,您可以在此处找到。
更新2:JDK7现在支持硬浮动。
该IcedTea项目-6-JRE-可可包包含一个JIT编译器,据说工作于RasPi。
我自己还没有尝试过。
甲骨文现在已经发布了Java JDK8 for ARM的开发人员预览版,该预览版特别包括对Pi上的硬浮动Raspbian的支持。它有效,并且我发现对于某些浮点密集型计算,它的速度比OpenJDK快20倍。http://jdk8.java.net/fxarmpreview/
在Rasbian上,您可以使用JamVM,其中包括“代码复制JIT”
apt-get install icedtea-7-jre-jamvm
JamVM是目前最快,最稳定的JVM,其中包括Rasbian上的JIT。
Rasbian还支持Avian,其中还包括JIT。您将必须手动构建它:http : //labb.zafena.se/?p=630
我希望从Debian SID源构建的Avian会出现在Raspbian中。Avian目前存在于Debian SID实验jvm-7-avian-jre
包中。
Avian和JamVM都与OpenJDK-7类结合使用,因此您可以同时使用它们来加速所有Java启动器,例如javac和java。该文件/etc/java-7-openjdk/jvm-armhf.cfg
确定在Rasbian上的openjdk 7中默认使用哪个JVM。
您还可以分别告诉Java启动器要使用哪个jvm:
java -jamvm
javac -J-jamvm
可以将OpenJDK 7与Java JDK8中的JVM(包括一个JIT)结合起来,以获得支持X11且Swing / AWT正常运行的设置。
带有“ Classpath”异常的JNI接口清楚地将JVM和运行时环境类分开。如果将JavaFX 8预览中的客户端热点(jre / lib / arm / client / libjvm.so)与Rasbian编译的OpenJDK 7 Runtime环境类和Java启动器(/ usr / lib / jvm / java-7- openjdk-armhf),您将获得以下设置和优势:
设定:
从http://jdk8.java.net/fxarmpreview/index.html下载jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz
# 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