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

StackOverflow https://stackoverflow.com/questions/230193

  •  04-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top