Подтвердить что ты не робот

Что вы не можете сделать на виртуальной машине Dalvik (Android VM), которую вы можете использовать в Sun VM?

Я знаю, что вы можете запускать почти всю Java в Dalvik VM, что вы можете в Java VM, но ограничения не очень ясны. Кто-нибудь сталкивается с какими-либо крупными камнями преткновения? У большинства крупных библиотек есть проблемы? Любые языки, которые компилируются в байт-код Java ( Scala, Jython и т.д.), Работают не так, как ожидалось?

4b9b3361

Ответ 1

Существует ряд вещей, которые Dalvik не будет обрабатывать или не будет обрабатывать точно так же, как стандартный байт-код Java, хотя большинство из них довольно продвинуты.

Самый сильный пример - это генерация байт-кода времени выполнения и загрузка пользовательского класса. Скажем, вы хотели бы создать некоторый байт-код, а затем использовать загрузчик классов для загрузки его для вас, если этот трюк работает на вашей обычной машине, гарантированно не будет работать на Dalvik, если вы не измените генерацию байткода.

Это предотвращает использование определенных фреймворков инъекций зависимостей, наиболее известным примером которых является Google Guice (хотя я уверен, что некоторые люди работают над этим). С другой стороны, AspectJ должен работать, поскольку он использует инструментарий для байт-кода в качестве этапа компиляции (хотя я не знаю, если кто-то пытался).

Что касается других языков jvm - все, что в конце компилируется в стандартный байт-код и не использует инструментарий для байт-кода во время выполнения, может быть преобразовано в Dalvik и должно работать. Я знаю, что люди запускали Jython на Android, и он работал нормально.

Другая вещь, о которой нужно помнить, заключается в том, что существует не только компиляция времени. Это не строго проблема Dalviks (вы всегда можете скомпилировать любой байт-код на лету, если хотите), но этот Android не поддерживает это и вряд ли это сделает. В то время как микрообъектизация для стандартной Java была бесполезной - компоненты имели разные характеристики времени исполнения в тестах, а не как части более крупных систем - микрообъективы для телефонов Android имеют смысл.

Ответ 2

Если вы видите " Dalvik Virtual Machine internals" Google IO session, вы можете найти, что Dalvik не поддерживает генерация GC.

Таким образом, это может ухудшить производительность частых создания и удаления объектов. Java VM поддерживает генераторный GC, поэтому он показал бы лучшую производительность GC для той же ситуации.

И кроме того, Dalvik использует трассировку градиента JIT вместо грамотности метода JIT.

Ответ 3

Еще одна вещь, которая, я думаю, может быть добавлена ​​здесь, заключается в том, что Dalvik, по-видимому, не сохраняет порядок полей при перечислении полей класса с использованием API отражения. Теперь API-интерфейс отражения не гарантирует никаких гарантий (так что в идеале вы не должны зависеть от него в любом случае), но большинство других виртуальных машин там сохраняют заказ.

Ответ 4

Просто добавьте в беседу, не предназначенную для оживления старого потока. Я просто наткнулся на это в своем поиске и хочу добавить, что Jython тоже не работает из коробки с Dalvik. Просто попытка сделать пример приветствия приведет к следующему: