Доступен ли JDK с JIT-компилятором?

24

OpenJDK успешно компилируется и работает на Pi, но единственная версия, которую я нашел, - это версия без JIT. Oracle предоставляет такой JDK для других версий ARM, но не для ARMv6. Есть ли способ получить и запустить такую ​​версию JDK?

berry120
источник
Что за дистрибутив?
Jivings
В настоящее время Debian сжимается, хотя я не слишком обеспокоен изменением, если это поможет ситуации!
berry120
Вы не можете установить версию OpenJDK в официальном репо?
Jivings
@Jivings Да, это то, что я использую в данный момент. Но эта версия не поставляется с JIT (отсюда и вопрос!)
berry120
Извините :) Я понятия не имею, почему это не имеет JIT тогда. Кажется странным решение, вы нашли какое-то обоснование для этого?
Jivings

Ответы:

15

Oracle выпустила (начиная с Java 7u6) JDK с JIT, который работает на Pi с полной поддержкой AWT / Swing. Он также поддерживает JVMTI (cacao имеет только частичную поддержку.) Пресс-релиз здесь .

Я убедился, что он работает с Greenfoot и обеспечивает значительное ускорение по сравнению с простыми (не JIT) сборками OpenJDK.

На момент написания статьи он не поддерживает жесткие числа с плавающей запятой и поэтому не будет работать с такими дистрибутивами, как Raspbian, которые используют только hard float - однако это запланировано на будущий выпуск.

ОБНОВЛЕНИЕ: Как отметил Даррен, сейчас для ARM выпущена хард-плавающая версия в виде предварительной версии JDK8, вы можете найти ее здесь .

ОБНОВЛЕНИЕ 2: Hard float теперь поддерживается в JDK7.

berry120
источник
Какие дистрибутивы он поддерживает?
Zoot
2
@Zoot Я использовал его с Debian squeeze отлично - он должен поддерживать любой дистрибутив Linux, который может использовать softfloat.
berry120
6

Пакет icedtea-6-jre-cacao содержит JIT-компилятор и, как сообщается, работает на RasPi .

Я сам не пробовал.

finnw
источник
Это не просто JRE, а не JDK?
berry120
@ berry120: Именно в JRE нужен JIT. Не должно иметь значения, использовался ли JIT при компиляции программы.
finnw
Ах, хорошая мысль. Попробую :-)
berry120
1
JIT какао, кажется, не работает должным образом, по крайней мере, на Raspbian, и, кажется, это не легко исправить.
Даррен Уилкинсон
4

Oracle уже выпустила предварительную версию Java JDK8 для ARM для разработчиков, в которую включена поддержка Raspbian с плавающей точкой на Pi. Это работает, и я обнаружил, что он работает примерно в 20 раз быстрее, чем OpenJDK для некоторых вычислений с плавающей запятой. http://jdk8.java.net/fxarmpreview/

Даррен Уилкинсон
источник
Ты подтолкнул меня на это! Я как раз собирался опубликовать это :-)
berry120
3

На Rasbian вы можете использовать JamVM, который включает "JIT-копирование кода"

apt-get install icedtea-7-jre-jamvm

JamVM в настоящее время является самой быстрой и стабильной JVM, которая включает JIT на Rasbian.

Avian также поддерживается на Rasbian, который также включает JIT. Вам придется построить его вручную: http://labb.zafena.se/?p=630

Я ожидаю, что Avian появится в Raspbian, когда он будет собран из источника SID Debian. Птичий в настоящее время существует в экспериментальном SID Debian внутриjvm-7-avian-jre пакета.

И Avian, и JamVM работают в сочетании с классами OpenJDK-7, поэтому вы можете использовать их для ускорения всех программ запуска Java, таких как javac и java. файл/etc/java-7-openjdk/jvm-armhf.cfg определяет, какая JVM используется по умолчанию в openjdk 7 на Rasbian.

Вы также можете указать java-пусковым установкам индивидуально, какой jvm использовать:

java -jamvm

javac -J-jamvm
Ксеркс Рэнби
источник
2

Oracle выпустила полную версию (больше не предварительный просмотр) Java 8 и Java 7 для архитектуры ARM Raspberry Pi: ссылка на Java 8 .

Вы также можете использовать из командной строки:

sudo apt-get update
sudo apt-get install oracle-java8-jdk
симулянт
источник
1

Можно объединить OpenJDK 7 с JVM из Java JDK8, который включает JIT, чтобы получить установку с поддержкой X11 и рабочую версию Swing / AWT.

Интерфейс JNI, за исключением «Classpath», четко разделяет классы среды JVM и среды выполнения. Если вы используете клиентскую точку доступа (jre / lib / arm / client / libjvm.so) из предварительного просмотра JavaFX 8 в сочетании с скомпилированными Rasbian классами среды выполнения OpenJDK 7 и средствами запуска java (/ usr / lib / jvm / java-7- openjdk-armhf) вы получите следующие настройки и преимущества:

  • Клиент Hotspot JIT (из предварительного просмотра JavaFX 8)
  • Поддержка Swing / AWT (с использованием классов OpenJDK из пакета openjdk-7-jre)
  • поддержка Pulse-Audio (IcedTea Pulse-Java из пакета openjdk-7-jre и openjdk-7-jre-headless)
  • Поддержка апплета веб-браузера с использованием icedtea-web (из пакета icedtea-7-plugin)
  • средство запуска JNLP javaws с использованием icedtea-web (из пакета icedtea-7-plugin)
  • автоопределение JNI armhf с помощью Java-пусковых программ OpenJDK (Java-пусковые установки OpenJDK добавляют специфичный для armhf путь к системной библиотеке в java.library.path). Включение пути / usr / lib / arm-linux-gnueabihf в java.library.path позволяет библиотекам java, таким как библиотека Pi4J GPIO и JogAmp gluegen-rt JOGL / JOAL, правильно определять, что он работает в системе armhf linux и затем загрузите реализацию JNI armhf вместо реализации JNI armel.
  • Поддержка обработки изображений и печати в серверных приложениях JavaEE, таких как glassfish и tomcat, с использованием удобных классов OpenJDK.

Настроить:

Загрузите jdk-8-ea-b36e-linux-arm-hflt-29_nov_2012.tar.gz с 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
xranby
источник