当前位置:  开发笔记 > 编程语言 > 正文

您可以在Sun VM中使用Dalvik VM(Android的VM)做什么?

如何解决《您可以在SunVM中使用DalvikVM(Android的VM)做什么?》经验,为你挑选了2个好方法。

我知道你可以在Dalvik的VM中运行几乎所有Java ,你可以在Java的VM中运行,但是局限性不是很明显.有没有人遇到任何重大绊脚石?有没有主要图书馆有问题?任何编译为Java字节代码的语言(Scala,Jython等...)都无法正常工作?



1> Marcin..:

Dalvik有许多东西不能处理或不会像标准Java字节码那样处理,尽管它们中的大多数都是非常先进的.

最严重的例子是运行时字节码生成和自定义类加载.假设您想创建一些字节码,然后使用类加载器为您加载它,如果该技巧在您的普通机器上运行,则保证不能在Dalvik上运行,除非您更改字节码生成.

这可以防止你使用某些依赖注入框架,最着名的例子是Google Guice(虽然我确信有些人会这样做).另一方面,AspectJ应该工作,因为它使用字节码检测作为编译步骤(虽然我不知道如果有人尝试过).

至于其他jvm语言 - 最终编译为标准字节码并且在运行时不使用字节码检测的任何东西都可以转换为Dalvik并且应该可以工作.我知道人们在Android上运行Jython并且运行正常.

另外需要注意的是,没有及时编译.这不是严格的Dalviks问题(如果你愿意,你可以随时编译任何字节码),但Android不支持,并且不太可能这样做.在这种效果中,标准Java的微基准测试毫无用处 - 组件在测试中具有与大型系统不同的运行时特征 - Android手机的微基准测试完全有意义.


来自Android Froyo,它支持跟踪粒度JIT编译器.
一些更新:Guice的特殊版本可以在Android上运行.http://code.google.com/p/google-guice/downloads/detail?name=guice-2.0-no_aop.jar Google有一个团队致力于JIT for Android.http://groups.google.com/group/android-platform/browse_thread/thread/331d5f5636f5f532
谷歌Guice工作正常.查看http://roboguice.org,了解如何在android上使用guice.
实际上,运行时字节码加载是可能的,但不适用于.class文件.使用[DexClassLoader](http://developer.android.com/reference/dalvik/system/DexClassLoader.html),您可以从.jar文件中的.dex文件加载代码.(Android上的Clojure通过运行来加载JVM字节码JVM-to-Dalvik编译器本身并将其包含在应用程序中.虽然这有效但速度非常慢.)

2> Wonil..:

如果您看到" Dalvik虚拟机内部 "Google IO会话,您会发现Dalvik不支持分代GC.

因此,它可能会降低频繁创建和删除对象的性能.Java VM支持分代GC,因此在相同的情况下它会显示更好的GC性能.

而且,Dalvik使用trace-granuality JIT而不是方法粒度JIT.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有