Комментарии 52
Поясните, а почему вы употребляете JVM в адрес DalvikVM? Там в последнем свой байткод, своя архитектура машины, свой формат исполняемых файлов, свой RMI (remote method invocation) и AIDL (не Java IIOP)?
Но от этого Dalvik не перестаёт быть JVM. JVM от Oracle носит название HotSpot. Но оба они Java Virtual Machine по сути.
Не понимаю, почему они Dalvik = Java Virtual Machine. Что должно измениться в Dalvik, чтобы он перестал быть JavaVM? Если я буду из Scala компилировать в .dex и выполнять на Dalvik, Dalvik останется JVM? Если да, то вопрос — а что там от Java?
От Java там ЯП.
Чтобы Dalvik перестал быть JVM его нужно заставить исполнять другой ЯП, например если Google заставит Dalvik исполнять Dart, то он из JVM станет D(art) VM.
Чтобы Dalvik перестал быть JVM его нужно заставить исполнять другой ЯП, например если Google заставит Dalvik исполнять Dart, то он из JVM станет D(art) VM.
Там — это в Dalvik? Если я правильно понимаю, Dalvik не исполняет Java, он исполняет dex-коды, в котором никаких намёков на то, что это Java, нет — dalvik-код совершенно отличается от java-кода, потому что он регистровый
Код — да, другой. Но ЯП который преобразовывается в этот код всё равно Java. Я это имел в виду. Хотя, не исключаю, что могу заблуждаться.
VM в данном случае интерпретирует не ЯП напрямую а некий байткод, по этому такое название некорректно. Кстати как раз на примере JVM и CLI — хорошо видно, что несколько совершенно разных ЯП компилируется в один и тот-же байткод (Java/Jyton/JRuby/Scala и т.д. в случае JVM и тонна всяких языков для CLI).
Ребята, если вдаваться в статистику, то и JVM тоже не JavaVM, поскольку про Java она не знает, а работает с байткодом.
Это не моя статья, это перевод vladnevzorov.com/2011/04/18/android-application-architecture-part-i-background/ Думаю, JVM — это класс программ, а не конкретная реализация. Вот Shark выше привёл пример Oracle HotSpot
Всё дело в том что JVM должна исполнять Java Byte code чтобы называться JVM. Грубо говоря я должен иметь возможности взять готовый class файл и выполнить на этой JVM без изменений. В этом вся суть JVM. Если этого нет, то это всё что угодно но не JVM. Не путайте pls Java Programming Language и Java Virtual Machine. Это разные вещи.
«В подобной ситуации компания Apple решила построить Mac OS на основе Free BSD. Android Inc приняла решение использовать Linux как основу для Android.»
Как так? Mac отдельная ветка Unix с микроядром Mach, как раз Apple-то свою систему с нуля выстраивал…
Как так? Mac отдельная ветка Unix с микроядром Mach, как раз Apple-то свою систему с нуля выстраивал…
Ядро MacOS построено на основе микроядра Mach и кода проекта FreeBSD. Первое обеспечивает IPC, управление памятью, поддержку драйверов. Второе обеспечивает сетевой стек, файловую систему и вообще весь привычный Unix API.
developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KernelProgramming/Architecture/Architecture.html
developer.apple.com/library/mac/#documentation/Darwin/Conceptual/KernelProgramming/Architecture/Architecture.html
Apple решила использовать Objective C++ как язык программирования и среду выполнения приложения iOS. Objective C++ выглядит более или менее естественным выбором для ОС, в основе которой лежит Free BSD. Можно рассматривать Objective C++ как обычный C++ с кастомным препроцессором, который добавляет некоторые специфические лингвистические конструкции. Почему же нельзя использовать стандартный C++, на котором написана Free BSD? Мне кажется причина в том, что Apple старается всё делать в своём, «эппловском» стиле.
Я понимаю, что это перевод, но после такого абзаца есть повод сильно задуматься над компетентностью автора и читать статью дальше
хотелось внести пару поправок:
1. Не Objective C++, а Objective-C, известный также как Objective C, ObjC или Obj-C. автор оригинальной статьи глубоко заблуждается по этому поводу.
2. Не QT, а Qt, ибо QT расшифровывается как QuickTime.
3. >>Почему это так? Почему, например, Android-приложения не написаны на C++? Со стороны Google я не нашёл никаких объяснений, поэтому могу поделиться лишь собственными соображениями.
наверное никто не слышал про gcc. однако проблема в стоимости разработки самих мобильных приложений.
4. >>Тем не менее, это не всегда практично. Например, использование ядра Linux заменило уменьшило стоимость разработки (возможно где-то и без того чрезмерно большую). Согласитесь, если кто-то решит создать нечто, напоминающее ядро Linux в его сегодняшнем состоянии, ему потребуется несколько миллионов долларов.
очнитесь! какие миллионы??? речь минимум о миллиарде и сотен тысяч человеко-часов!
все это конечно же адресовано автору оригинального поста.
1. Не Objective C++, а Objective-C, известный также как Objective C, ObjC или Obj-C. автор оригинальной статьи глубоко заблуждается по этому поводу.
2. Не QT, а Qt, ибо QT расшифровывается как QuickTime.
3. >>Почему это так? Почему, например, Android-приложения не написаны на C++? Со стороны Google я не нашёл никаких объяснений, поэтому могу поделиться лишь собственными соображениями.
наверное никто не слышал про gcc. однако проблема в стоимости разработки самих мобильных приложений.
4. >>Тем не менее, это не всегда практично. Например, использование ядра Linux заменило уменьшило стоимость разработки (возможно где-то и без того чрезмерно большую). Согласитесь, если кто-то решит создать нечто, напоминающее ядро Linux в его сегодняшнем состоянии, ему потребуется несколько миллионов долларов.
очнитесь! какие миллионы??? речь минимум о миллиарде и сотен тысяч человеко-часов!
все это конечно же адресовано автору оригинального поста.
> речь минимум о миллиарде и сотен тысяч человеко-часов!
То есть на один час работы человека у вас приходится несколько тысяч долларов? Неплохо.
То есть на один час работы человека у вас приходится несколько тысяч долларов? Неплохо.
Соглашусь
с 3 пунктом. Кросс-компиляции и разные архитектуры не проблема для gcc, Ubuntu и Windows идут этим путем.
Главное же конечно было «замануха» для программистов, хотя я очень жалею, что они не выбрали LLVM, который архитектурно переносим и весь (!) Android API на этом не построили.
А так мы имеем серьезно тормозящие приложения, на некоторых алгоритмах NDK до сих пор работает в 2-10 раз быстрее, а для графики это очень существенно.
с 3 пунктом. Кросс-компиляции и разные архитектуры не проблема для gcc, Ubuntu и Windows идут этим путем.
Главное же конечно было «замануха» для программистов, хотя я очень жалею, что они не выбрали LLVM, который архитектурно переносим и весь (!) Android API на этом не построили.
А так мы имеем серьезно тормозящие приложения, на некоторых алгоритмах NDK до сих пор работает в 2-10 раз быстрее, а для графики это очень существенно.
>> Согласитесь, если кто-то решит создать нечто, напоминающее ядро Linux в его сегодняшнем состоянии, ему потребуется несколько миллионов долларов.
> очнитесь! какие миллионы? речь минимум о миллиарде и сотен тысяч человеко-часов!
Вы удивитесь:
ru.wikipedia.org/wiki/Linux_(ядро)#Оценка стоимости разработки с нуля
> очнитесь! какие миллионы? речь минимум о миллиарде и сотен тысяч человеко-часов!
Вы удивитесь:
ru.wikipedia.org/wiki/Linux_(ядро)#Оценка стоимости разработки с нуля
Не Objective C++, а Objective-C
Objective C++ тоже бывает. Вот, к примеру, тут упоминается: habrahabr.ru/post/137469/
Objective C++ тоже бывает. Вот, к примеру, тут упоминается: habrahabr.ru/post/137469/
DalvikVM никогда не была JVM. Это регистровая DEX-машина, использующая собственный байткод, полученный из откомпилированного java-байткода. Кстати, Oracle усмотрела в технологии Android нарушение интеллектуальной собственности и подала на Google в суд. Google пришлось оправдываться и объяснять, что Dalvik это не JVM и не имеет прямого отношения к Java™.
Возможно, Oracle заинтересуется мобильным сегментом рынка. И тогда JavaME станет конкурирующей платформой. Пока же удел JavaME, как и всегда — простые развлекательные приложения от операторов, вендоров услуг, и корпоративные клиенты на базе сотовых терминалов.
Возможно, Oracle заинтересуется мобильным сегментом рынка. И тогда JavaME станет конкурирующей платформой. Пока же удел JavaME, как и всегда — простые развлекательные приложения от операторов, вендоров услуг, и корпоративные клиенты на базе сотовых терминалов.
Не знаю, насколько это правда, но я слышал, что Java в качестве языка была выбрана, чтобы упростить процесс перехода на новую платформу тем разработчикам, которые писали под обычные телефоны, под Java ME.
>> Dalvik JVM использует архитектуру, основанную на регистрах против стековой архитектуры в других JVM, что приводит к увеличению скорости выполнения и уменьшению размеров бинарников.
Это каких других?
HotStop от санок — стековый
JRockit от bea — стековый
Apache Harmony — регистровый, разработка загнулась так как апачи ни хотели покупать kit на проверку совместимости, а бесплатный не позволял им лицензироваться и называться jvm для работы в киосках и на мобилках, большинство наработок ушли в DalvikVM
По поводу стековости java для начала советую посмотреть во что jit превращает ваш код, поверьте параметры очень хорошо и часто передаются и в обычной java через регистры. А выражения «так как у нас регистровая vm, то она быстрее работает» во фразах разработчиков за последние несколько лет превратились «так как у нас регистровая vm, то для нее проще было написать более быстрый интерпретатор чем в стандартной java, а после проще написать jit». К тому же: javame на арм процессах умела jit еще когда андроид только начинался и обычных числодробильных тестах всегда уделывала dalvikvm.
Это каких других?
HotStop от санок — стековый
JRockit от bea — стековый
Apache Harmony — регистровый, разработка загнулась так как апачи ни хотели покупать kit на проверку совместимости, а бесплатный не позволял им лицензироваться и называться jvm для работы в киосках и на мобилках, большинство наработок ушли в DalvikVM
По поводу стековости java для начала советую посмотреть во что jit превращает ваш код, поверьте параметры очень хорошо и часто передаются и в обычной java через регистры. А выражения «так как у нас регистровая vm, то она быстрее работает» во фразах разработчиков за последние несколько лет превратились «так как у нас регистровая vm, то для нее проще было написать более быстрый интерпретатор чем в стандартной java, а после проще написать jit». К тому же: javame на арм процессах умела jit еще когда андроид только начинался и обычных числодробильных тестах всегда уделывала dalvikvm.
А ведь и правда, совсем закрылся Хармони, я после конфликта с Ораклом ждал, что они все таки смогут.
Apache Harmony is retired at the Apache Software Foundation since Nov 16, 2011.
The information on these pages may be out of date, or may refer to resources that have moved or have been made read-only.
For more information please refer to the Apache Attic
harmony.apache.org/
Apache Harmony is retired at the Apache Software Foundation since Nov 16, 2011.
The information on these pages may be out of date, or may refer to resources that have moved or have been made read-only.
For more information please refer to the Apache Attic
harmony.apache.org/
Virtual Machine Showdown: Stack Versus Registers (PDF, 200кб) — здесь можно почитать более-менее обоснованное сравнение регистровой и стековой архитектур.
>Apple решила использовать Objective C++ как язык программирования и среду выполнения приложения iOS. Objective C++ выглядит более или менее естественным выбором для ОС, в основе которой лежит Free BSD.
Parse error, segmentation fault.
Дальше уже просто читать не стал… Вопиющее незнание матчасти.
Parse error, segmentation fault.
Дальше уже просто читать не стал… Вопиющее незнание матчасти.
>Я думаю, это было критически важное архитектурное решение, которое поставило Android в стороне от остальных мобильных ОС на основе Linux, представленных в настоящее время. Насколько мне известно, ни у одной из них нет совместимости двоичного кода на уровне приложений. Возьмём для примера MeeGo. Она использует C++ и фреймворк QT; не смотря на то, что QT кроссплатформенный, необходимость делать разные сборки для разных платформ не исчезает.
Вот за это решение и не хочется иметь ничего общего с ведром… Получилась некая вещь в себе, в которой можно писать только на джаве. Да и в случае Qt не такая уж проблема собрать под все известные платформы. OBS в помощь, а скорость исполнения таки выше, чем у жабы и батарейку меньше кушает.
Вот за это решение и не хочется иметь ничего общего с ведром… Получилась некая вещь в себе, в которой можно писать только на джаве. Да и в случае Qt не такая уж проблема собрать под все известные платформы. OBS в помощь, а скорость исполнения таки выше, чем у жабы и батарейку меньше кушает.
>>> Получилась некая вещь в себе, в которой можно писать только на джаве.
Не совсем так. Есть же PyGame subset for Android ( habrahabr.ru/post/119831/ ) и другие варианты писать приложения для Андроида, избегая Джавы.
Не совсем так. Есть же PyGame subset for Android ( habrahabr.ru/post/119831/ ) и другие варианты писать приложения для Андроида, избегая Джавы.
Для меня наоборот огромным плюсом в разработке под Android является Java. Отличный сильный язык
а еще монодроид и вероятно еще куча вариантов
работает на процессорах с архитектурой x86, ARM и Atom
С архитектурой Atom, значит. Занятно.
Очень небрежный перевод.
"...in many aspects it is closer to a typical AJAX application architecture than to any sort of desktop GUI application architecture based on Java or C# or C++ or VB etc."
"… Во многих аспектах это (приложения Андроид) ближе к архитектуре типичного AJAX приложения, чем к любому настольному GUI приложению основанному на Java, С#, С++, VB и тому подобное. "
Ваш перевод имеет совсем другой смысл. Ниже по тексту вы сами же пишите:
«Просто помните, что Android-приложения очень сильно отличаются от десктопных.»
FreeBSD писался и пишется на чистом C.
Единственная OS писавшаяся на C++ это BeOS. И то только интерфейсная часть. Вся низкоуровневая логика там была написана на asm'е.
"...in many aspects it is closer to a typical AJAX application architecture than to any sort of desktop GUI application architecture based on Java or C# or C++ or VB etc."
"… Во многих аспектах это (приложения Андроид) ближе к архитектуре типичного AJAX приложения, чем к любому настольному GUI приложению основанному на Java, С#, С++, VB и тому подобное. "
Ваш перевод имеет совсем другой смысл. Ниже по тексту вы сами же пишите:
«Просто помните, что Android-приложения очень сильно отличаются от десктопных.»
FreeBSD писался и пишется на чистом C.
Единственная OS писавшаяся на C++ это BeOS. И то только интерфейсная часть. Вся низкоуровневая логика там была написана на asm'е.
спасибо за статью, только:
IPC всегда была межпроцессорной связью.
А так — с удовольствием погрузился в экскурс.
Особый способ для выполнения вызовов внутри процессов (inter process calls, IPC)
IPC всегда была межпроцессорной связью.
А так — с удовольствием погрузился в экскурс.
НЛО прилетело и опубликовало эту надпись здесь
Несмотря на некоторое сходство Apple iOS и Android ОС, существуют значительные отличия между архитектурными решениями на инфраструктурном уровне обоих ОС
обеих.
Спасибо за статью.
Блииинннн как я мог проглядеть эту статью… Спасибо АВТОРРРРРР
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Архитектура Android-приложений. Часть I — истоки