代码之家  ›  专栏  ›  技术社区  ›  Ichorus

在Dalvik虚拟机(Android的虚拟机)上你不能做什么,而在Sun虚拟机上你可以做什么?

  •  55
  • Ichorus  · 技术社区  · 17 年前

    我知道,您可以在中运行几乎所有的Java 达尔维克的虚拟机 你可以进去吗 Java的虚拟机 但其局限性并不十分清楚。有人遇到过什么大的绊脚石吗?有没有大型图书馆遇到问题?任何编译成Java字节码的语言( 斯卡拉 , 杰顿 等…)没有按预期工作?

    4 回复  |  直到 10 年前
        1
  •  35
  •   peterh Eli    5 年前

    有许多事情Dalvik不会处理,或者不会以与标准Java字节码完全相同的方式处理,尽管它们中的大多数都非常高级。

    这个 最严重的例子是运行时字节码生成

    这使得您无法使用某些依赖项注入框架,最著名的例子是GoogleGuice(尽管我相信有人在做这方面的工作)。另一方面,AspectJ应该可以工作,因为它使用字节码插装作为编译步骤(尽管我不知道是否有人尝试过)。

    至于其他jvm语言——任何最终编译成标准字节码并且在运行时不使用字节码插装的语言都可以转换成Dalvik,应该可以工作。我知道人们确实在Android上运行了Jython,而且运行正常。

    另一件需要注意的事情是 没有即时编译

        2
  •  12
  •   Wonil    14 年前

    如果你看到“ Dalvik Virtual Machine internals “谷歌IO会话,你可以发现Dalvik不支持 generational GC .

    而且,Dalvik使用 trace-granuality JIT 而不是JIT方法。

        3
  •  2
  •   Wilfred Springer    14 年前

    我猜这里可以添加的另一件事是,Dalvik在使用反射API列出类的字段时显然没有保留字段顺序。现在,反射API无论如何都不会对它做出任何保证(因此理想情况下,无论如何都不应该依赖它),但大多数其他VM都是如此 维持秩序。

        4
  •  -1
  •   Sean Walsh    12 年前

    只是为了增加对话的内容,而不是为了重提旧话题。我只是在搜索中遇到了这个问题,我想补充一点,Jython也不适合Dalvik。简单地尝试执行hello world示例将产生以下结果: