是否有带有JIT编译器的JDK?


24

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


什么是发行版?
Jivings 2012年

Debian目前处于紧缩状态,尽管我对改变是否对情况有所帮助并不为过!
berry120 2012年

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

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

抱歉:)我不知道为什么那时候没有JIT。似乎是一个奇怪的决定,您找到任何依据吗?
Jivings 2012年

Answers:


15

Oracle现在已经发布了(从Java 7u6开始)带有JIT的JDK,该JDK可在具有完全AWT / Swing支持的Pi上运行。它还支持JVMTI(可可仅部分支持。)此处的新闻稿。

我已经验证了它可以与Greenfoot一起使用,并且与普通的(非JIT)OpenJDK构建相比,它提供了巨大的加速。

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

更新:正如Darren所指出的那样,现已以JDK8预览版本的形式为ARM发布了一个硬浮点版本,您可以在此处找到。

更新2:JDK7现在支持硬浮动。


它支持哪些发行版?
Zoot 2012年

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



3

在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

2

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

您也可以从命令行使用:

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

1

可以将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),您将获得以下设置和优势:

  • 热点客户端JIT(来自JavaFX 8预览版)
  • Swing / AWT支持(使用openjdk-7-jre包中的OpenJDK类)
  • 脉冲音频支持(来自openjdk-7-jre和openjdk-7-jre-headless软件包的IcedTea pulse-java)
  • 使用icedtea-web的Web浏览器小程序支持(来自icedtea-7-plugin包)
  • 使用icedtea-web的JNLP javaws启动器(来自icedtea-7-plugin包)
  • armhf JNI由OpenJDK java启动器自动检测(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实现。
  • 通过使用完整的OpenJDK类,JavaEE服务器应用程序(例如glassfish和tomcat)中的图像处理和打印支持。

设定:

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.