OpenJDK可以成功在Pi上编译并运行,但是我发现的唯一版本是没有JIT的版本。 Oracle为其他版本的ARM(而非ARMv6)提供了这样的JDK。有什么办法可以同时启动并运行这种版本的JDK?

评论

什么是发行版?

Debian目前处于紧缩状态,尽管我对改变是否对情况有所帮助并没有太过着迷!

不能在官方仓库中安装OpenJDK版本吗?

@Jivings是的,这就是我目前正在使用的。但是该版本没有JIT(因此出现了问题!)

@Jivings如果我不得不猜测,创建一个JIT并不是一件容易的事,因为针对每个平台/体系结构的优化可能有所不同。但这只是一个猜测:-)

#1 楼

Oracle现在已经发布了(从Java 7u6开始)带有JIT的JDK,该JDK可在具有完全AWT / Swing支持的Pi上运行。它还支持JVMTI(可可豆仅部分支持。)新闻稿在这里。我已经验证了它可以与Greenfoot一起使用,并且与普通(非JIT)的同类产品相比提供了巨大的提速。 OpenJDK构建。

在撰写本文时,它不支持硬浮点,因此不适用于仅使用硬浮点的Raspbian等发行版-但是计划在将来的发行版中使用。

UPDATE:正如Darren所指出的,现在已经以JDK8预览版本的形式为ARM发布了一个硬浮点版本。您可以在这里找到它。

UPDATE 2 :JDK7现在支持硬浮点。

评论


它支持哪些发行版?

–动物园
2012年8月16日19:54

@Zoot我已经将它与Debian紧密结合使用-它应该支持任何可以使用softfloat的Linux发行版。

– berry120
2012年8月16日在22:59

#2 楼

icedtea-6-jre-cacao软件包包含一个JIT编译器,并且据说可以在RasPi上使用。

我自己还没有尝试过。

评论


不仅是JRE,还不是JDK吗?

– berry120
2012年6月14日23:16

@ berry120:需要在JRE中进行JIT。编译程序时是否正在使用JIT无关紧要。

– Finnw
2012年6月14日23:18

啊,好点。将尝试一下:-)

– berry120
2012年6月14日23:18

可可JIT似乎无法正常工作,至少在Raspbian上无法正常工作,而且似乎没有容易解决的方法。

–达伦·威尔金森(Darren Wilkinson)
2012年7月24日在19:18

#3 楼

甲骨文现在已经发布了Java JDK8 for ARM的开发人员预览版,该预览版特别包括对Pi上的硬浮动Raspbian的支持。它有效,并且我发现对于某些浮点密集型计算,它的速度比OpenJDK快20倍。 http://jdk8.java.net/fxarmpreview/

评论


你打败我了!我正要发布:-)

– berry120
2012年12月20日下午13:51

#4 楼

在Rasbian上,您可以使用包含“代码复制JIT”的JamVM

apt-get install icedtea-7-jre-jamvm


JamVM是目前最快且最稳定的JVM,在Rasbian上包含JIT。

还包含JIT的Rasbian也支持Avian。
您将必须手动构建它:http://labb.zafena.se/?p=630

我希望从Debian SID源构建的Avian能够出现在Raspbian中。 Avian目前存在于jvm-7-avian-jre软件包中的Debian SID实验版中。

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


#5 楼

Oracle为Raspberry Pi的ARM体系结构发布了Java 8和Java 7的完整版本(不再预览):链接到Java8。

也可以从命令行使用:

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


#6 楼

可以将OpenJDK 7与Java JDK8中的JVM结合在一起,该Java JDK8包含一个JIT,以获得支持X11且Swing / AWT工作的设置。

JNI接口(带有“ Classpath”异常)明显分开JVM和运行时环境类。如果将JavaFX 8预览中的客户端热点(jre / lib / arm / client / libjvm.so)与Rasbian编译的OpenJDK 7 Runtime环境类和Java启动器(/ usr / lib / jvm / java-7- openjdk-armhf),您将获得以下设置和好处:


热点客户端JIT(来自JavaFX 8预览版)
Swing / AWT支持(使用来自的OpenJDK类openjdk-7-jre软件包)
脉冲音频支持(来自openjdk-7-jre和openjdk-7-jre-headless软件包的IcedTea pulse-java)
使用icedtea-web的网络浏览器小程序支持(来自icedtea-7-plugin包)
一个使用icedtea-web的JNLP javaws启动器(来自icedtea-7-plugin包)
OpenJDK Java启动器对Armhf JNI的自动检测(OpenJDK Java启动器添加了armhf特定的系统库路径到java.library.path中)。通过将/ usr / lib / arm-linux-gnueabihf路径包含到java.library.path中,可以使Java库(例如Pi4J GPIO库和JogAmp gumgen-rt JOGL / JOAL)正确检测它是否在armhf linux系统上运行然后加载armhf JNI实现而不是armel JNI实现。
通过使用headfull OpenJDK类在JavaEE服务器应用程序(例如glassfish和tomcat)中提供图像处理和打印支持。

设置:


http://jdk8.java.net/fxarmpreview/index.html下载jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz br />
# 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