我知道你可以在Dalvik的VM中运行几乎所有Java ,你可以在Java的VM中运行,但是局限性不是很明显.有没有人遇到任何重大绊脚石?有没有主要图书馆有问题?任何编译为Java字节代码的语言(Scala,Jython等...)都无法正常工作?
Dalvik有许多东西不能处理或不会像标准Java字节码那样处理,尽管它们中的大多数都是非常先进的.
在最严重的例子是运行时字节码生成和自定义类加载.假设您想创建一些字节码,然后使用类加载器为您加载它,如果该技巧在您的普通机器上运行,则保证不能在Dalvik上运行,除非您更改字节码生成.
这可以防止你使用某些依赖注入框架,最着名的例子是Google Guice(虽然我确信有些人会这样做).另一方面,AspectJ应该工作,因为它使用字节码检测作为编译步骤(虽然我不知道如果有人尝试过).
至于其他jvm语言 - 最终编译为标准字节码并且在运行时不使用字节码检测的任何东西都可以转换为Dalvik并且应该可以工作.我知道人们在Android上运行Jython并且运行正常.
另外需要注意的是,没有及时编译.这不是严格的Dalviks问题(如果你愿意,你可以随时编译任何字节码),但Android不支持,并且不太可能这样做.在这种效果中,标准Java的微基准测试毫无用处 - 组件在测试中具有与大型系统不同的运行时特征 - Android手机的微基准测试完全有意义.
如果您看到" Dalvik虚拟机内部 "Google IO会话,您会发现Dalvik不支持分代GC.
因此,它可能会降低频繁创建和删除对象的性能.Java VM支持分代GC,因此在相同的情况下它会显示更好的GC性能.
而且,Dalvik使用trace-granuality JIT而不是方法粒度JIT.