Что вы можете не делать на Dalvik VM (VM Андроида), что вы можете в Sun VM?

голоса
55

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

Задан 23/10/2008 в 16:30
источник пользователем
На других языках...                            


4 ответов

голоса
32

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

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

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

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

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

Ответил 23/10/2008 в 21:07
источник пользователем

голоса
11

Если вы видите « Dalvik Virtual Machine Internals » Google IO сессии, вы можете найти Dalvik не поддерживает поколения GC .

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

А также, Dalvik использует след-granuality JIT вместо метода granuality JIT.

Ответил 05/03/2010 в 20:06
источник пользователем

голоса
2

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

Ответил 14/01/2012 в 17:36
источник пользователем

голоса
-1

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

Ответил 15/03/2014 в 05:04
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more