Комментарии 41
Вот вообще не понял причём тут Raspberry Pi )
Вообще планирую на 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. И вот это реально может помочь. Странно, что об этих важнейших фичах Вы забыли.
Иное дело, что в Java 8 самой по себе есть compact profiles. а в сборках оракла для Java SE 7 Embedded наверняка есть embedded-версия hotspot. И вот это реально может помочь. Странно, что об этих важнейших фичах Вы забыли.
OpenJDK 8 даже не пробовал, если честно. Я лишь знаю, что OpenJDK 7 загружает процессор в разы (в моём случае — более чем в 5 раз) больше, чем Oracle JDK8. В причинах я не разбирался. Возможно, дело в отсутствии HotSpot. Это не важно, потому что факт остаётся фактом: OpenJDK (актуальную версию) использовать на Raspberry PI невозможно.
Возможно, дело в отсутствии HotSpot
ЩИТО?
А заяснить слабо своё ЩИТО?
В OpenJDK на ARM используется JamVM или ZeroVM. В Oracle JDK — HotSpot VM.
Я неправ? Тогда проясните. Это же вы вроде в Oracle работаете, а не я.
В OpenJDK на ARM используется JamVM или ZeroVM. В Oracle JDK — HotSpot VM.
Я неправ? Тогда проясните. Это же вы вроде в Oracle работаете, а не я.
Судя по этой статье, HotSpot — в Java SE-Embedded.
А в стандартной JavaSE/OpenJDK 7? Судя по всему — нет.
В любом случае — это не важно. OpenJDK 7 непригодна для использования на Raspberry Pi.
А в стандартной 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
и именно о ней идёт речь в статье.
Нужна другая сборка? Попробуйте найти и проверить производительность. И не нужно будет теоретизировать.
apt-get install openjdk-7-jdk
и именно о ней идёт речь в статье.
Нужна другая сборка? Попробуйте найти и проверить производительность. И не нужно будет теоретизировать.
Мало ли кто, что и по каким причинам ставит в родной дистрибутив (тем более, по Вашим словам, оно не работает).
Вот я Вам и говорю: поставьте нормальную сборку вместо родной. Авось полегчает.
Вот я Вам и говорю: поставьте нормальную сборку вместо родной. Авось полегчает.
А я и поставил. И проблему решил. И поделился решением в самом первом посте. Только вам почему-то оно не понравилось. При том, что вы, похоже, Raspberry, в глаза не видели. Ну что же, критикуешь — предлагай. И не надо больше теорий. Только практика.
Дык я и предложил: поставить OpenJDK 7. Просто нормальную сборку, а не родную.
А вы просто дайте ссылку.
Апдейты:
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, которая сразу оптимизирована для мелких дивайсов.
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:
Вот результат:
$ 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 или нет?
$ 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 ничего не знаю.
Вообще, с поддержкой 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
В другой теме люди делились замерами:
habrahabr.ru/post/209470/#comment_7217626
habrahabr.ru/post/209470/#comment_7217870
habrahabr.ru/post/209470/#comment_7217626
habrahabr.ru/post/209470/#comment_7217870
И вот так если делать запросы:
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
$ 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.
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 :)
Если переводить дословно, получится что-то вроде «Java — это объектно-ориентированный язык программирования, созданный для запуска на разных операционных системах без необходимости перекомпиляции исходного кода.» Правда, так теряется немного смысл (хотя это и не отражено в оригинале), что же будет запускаться на разных ОС? Язык программирования?
Если писать коротко, то для большей ясности я бы написал как-нибудь так: «Java — объектно-ориетнированный язык программирования, исходный код которого компилируется в байт-код, который может быть запущен на любой платформе, для которой существует JVM, т.е. нет необходимости компилировать исходный код под целевую платформу». Разумеется, это не поймёт человек, не знающий, что такое JVM :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Raspberry Pi и чашечку Java, пожалуйста! (Часть 1)