Pull to refresh

Comments 41

Вот вообще не понял причём тут Raspberry Pi )
Whisper words of wisdom: let it be :)
Согласен, что подойдёт для программирование на любом железе где запустится Java. Но так как это единственные статьи про Java опубликованные в MagPI, решил перевести их, чтобы помочь переводу этого журнала на русский язык.
Вот только openjdk на Raspberry PI использовать крайне не рекомендуется. Тормозит и жрёт ресурсы неимоверно. Лучше использовать JDK8 EA от Oracle. Реально в разы быстрее шевелится.
UFO just landed and posted this here
Вообще планирую на Raspberry Pi запускать Java Embedded Suite, как раз для проверки насколько он требователен к ресурсам. Платформа в нём Java SE Embedded 7.
Кем не рекомендуется. Вами?
В том числе и мной. Серьёзные проблемы с производительностью OpenJDK на Raspberry PI, впрочем, известны всякому, кто пытался запускать на ней что-то посерьёзнее Hello World.
безусловно, JDK8 будет шустрее: три года не прошли даром, технология развивается. но вот openjdk или oracle jdk — совершенно не важно.

Иное дело, что в Java 8 самой по себе есть compact profiles. а в сборках оракла для Java SE 7 Embedded наверняка есть embedded-версия hotspot. И вот это реально может помочь. Странно, что об этих важнейших фичах Вы забыли.
OpenJDK 8 даже не пробовал, если честно. Я лишь знаю, что OpenJDK 7 загружает процессор в разы (в моём случае — более чем в 5 раз) больше, чем Oracle JDK8. В причинах я не разбирался. Возможно, дело в отсутствии HotSpot. Это не важно, потому что факт остаётся фактом: OpenJDK (актуальную версию) использовать на Raspberry PI невозможно.
А заяснить слабо своё ЩИТО?

В OpenJDK на ARM используется JamVM или ZeroVM. В Oracle JDK — HotSpot VM.

Я неправ? Тогда проясните. Это же вы вроде в Oracle работаете, а не я.
Судя по вот этой статье, там давно уже HotSpot, причём есть и C2.

Иной вопрос, какую VM бандлят в OpenJDK разработчики того или иного дистрибутива Linux под ARM.
Судя по этой статье, HotSpot — в Java SE-Embedded.

А в стандартной JavaSE/OpenJDK 7? Судя по всему — нет.

В любом случае — это не важно. OpenJDK 7 непригодна для использования на Raspberry Pi.
Ерунда. В стандартной OpenJDK всегда был и есть Hotspot.
Плевать. Всё равно не работает.
$ java -version
java version "1.7.0_07"
OpenJDK Runtime Environment (IcedTea7 2.3.2) (7u7-2.3.2a-1+rpi1)
OpenJDK Zero VM (build 22.0-b10, mixed mode)
$ java -hotspot
Error: hotspot VM not supported

это у вас IcedTea — сборка от RedHat из какого-то дистрибутива. Они какую угодно JVM могут прикрутить.
Именно это JDK устанавливается в Raspbian командой

apt-get install openjdk-7-jdk

и именно о ней идёт речь в статье.

Нужна другая сборка? Попробуйте найти и проверить производительность. И не нужно будет теоретизировать.
Мало ли кто, что и по каким причинам ставит в родной дистрибутив (тем более, по Вашим словам, оно не работает).

Вот я Вам и говорю: поставьте нормальную сборку вместо родной. Авось полегчает.
А я и поставил. И проблему решил. И поделился решением в самом первом посте. Только вам почему-то оно не понравилось. При том, что вы, похоже, Raspberry, в глаза не видели. Ну что же, критикуешь — предлагай. И не надо больше теорий. Только практика.
А вы просто дайте ссылку.
Апдейты:

1. Судя по этому комментарию apangin, в Java SE 7 Embedded от Oracle уже давно HotSpot

2. Согласно этой статье, c HotSpot C1 под Paspberry PI всё хорошо, а вот в C2 всё же есть некоторые проблемы.

3. Злые языки говорят, что (вроде как) в OpenJDK под ARM действительно не ставится HotSpot. То ли из лицензионных соображений, то ли из-за того, что Oracle Java SE Embedded под ARM стоит денег и поэтому этот кусок выкладывать в opensource не хотят. Видимо, Вы были правы в этом вопросе, а я поторопился.

4. Судя по вот этому замечанию, c портированием С1/С2 JIT есть сложности в ассемблерной части, поэтому ребята из IcedTea портировали только интерпретатор. Это и есть Zero; название видимо троллит C1 и C2, намекая на C0 :)

5. Согласно комментарию alexbel, для Raspberry PI лучше подойдёт Java ME Embedded, которая сразу оптимизирована для мелких дивайсов.

Попробовал установить Oracle Java 7 на Raspberry:

$ sudo apt-get install -y oracle-java7-jdk

Вот результат:

$ java -version
java version «1.7.0_40»
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode)

$ java -hotspot
Error: hotspot VM not supported

Какие-то взаимоисключающие параграфы получаются. Так всё-таки, как узнать есть HotSpot или нет?
Это Oracle JDK, а не OpenJDK. В ней-то как раз есть HotSpot.
А почему выдаёт «hotspot VM not supported»?
А, не увидел. Видимо, старая версия. В более новых вроде бы уже поддерживается.

Вообще, с поддержкой HotSpot для ARM всё не просто. Вроде бы есть сторонняя (не Oracle) реализация, и называется она ZeroVM. Вот тут написано. Но она для IcedTea. Про поддержку в OpenJDK именно для ARM ничего не знаю.
Для Java 8 получается во так:
$ /opt/jdk1.8.0/bin/java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b111)
Java HotSpot(TM) Client VM (build 25.0-b53, mixed mode)

$ /opt/jdk1.8.0/bin/java -hotspot -version
Unrecognized option: -hotspot
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

$ /opt/jdk1.8.0/bin/java -client -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b111)
Java HotSpot(TM) Client VM (build 25.0-b53, mixed mode)

$ /opt/jdk1.8.0/bin/java -server -version
Error occurred during initialization of VM
Server VM is only supported on ARMv7+ VFP
Конечно надо всё замерять. Сейчас установил Tomcat и при использовании Oracle JDK скорость отклика сервлета выше. Хотя сервлет простенький. По потребляемым ресурсам:

3496 tomcat7 20 0 269m 53m 7680 S 0.3 12.3 0:56.24 java
О спасибо за ссылки, почитаю, похоже эта тему интересна не только мне.
И вот так если делать запросы:

3496 tomcat7 20 0 269m 53m 7508 S 10.5 12.3 1:08.55 java
Сейчас проверил у себя на Debian

$ java -version
java version «1.7.0_51»
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

$ java -hotspot
Error: hotspot VM not supported
Через apt-get там доступно множество языков — те же scala, clojure. Без IDE (которое Raspbery Pi не потянет) они будут удобнее, чем java.
UFO just landed and posted this here
Я вот узнал, что в nano есть подсветка синтаксиса Java :)
Java, это язык объектно-ориентированного программирования для запуска исходного кода без необходимости комилляции под конкретную операционную систему.

А давно Java программы запускаются из исходного кода?
В оригинале:

Java is an object-oriented language designed to run on many operating systems without requiring recompilation of the source code.


Буде-ли корректно эту фразу перевести так:

Java, это объектно-ориентированный язык программирования, транслирующий исходный код в байт-код для запуска независимо от операционной системы без необходимости перекомпилляции.
Так было бы лучше.
Если переводить дословно, получится что-то вроде «Java — это объектно-ориентированный язык программирования, созданный для запуска на разных операционных системах без необходимости перекомпиляции исходного кода.» Правда, так теряется немного смысл (хотя это и не отражено в оригинале), что же будет запускаться на разных ОС? Язык программирования?
Если писать коротко, то для большей ясности я бы написал как-нибудь так: «Java — объектно-ориетнированный язык программирования, исходный код которого компилируется в байт-код, который может быть запущен на любой платформе, для которой существует JVM, т.е. нет необходимости компилировать исходный код под целевую платформу». Разумеется, это не поймёт человек, не знающий, что такое JVM :)
Sign up to leave a comment.

Articles