【问题标题】:How would you improve Dalvik? Android's Virtual Machine你将如何改进 Dalvik? Android的虚拟机
【发布时间】:2023-03-24 09:36:02
【问题描述】:

我目前正在写一篇关于 Android 平台的论文。经过一番research,很明显Dalvik还有改进的空间。我想知道,您认为将开发人员的时间用于实现这一目标的最佳方式是什么?

JIT 编译似乎是一个大问题,但我也听说这在如此低资源的机器上使用有限。有没有人有资源或数据来支持这一点?

还有其他选择吗?除了开发一个强大的原生开发工具包来绕过虚拟机。

有兴趣的朋友,有一个关于Dalvik VM的讲座已经录制上线。

欢迎提出任何想法,因为这个问题似乎是主观的,我会澄清一下,我将接受的答案必须为提议的更​​改提供一些理由。任何支持它的数据,例如 Sun JVM 在引入时的改进,都将是一个巨大的优势。

【问题讨论】:

  • 你怎么能在一篇论文中说:“很明显,Dalvik 有改进的空间”,却不知道这些空间是什么。放弃 JIT 编译意义重大:所有解释型语言都将从中受益。你还注意到了什么?
  • 抱歉,我应该进一步澄清。首先,当我说论文时,这更像是我论文的初步,因此不需要像已发表的论文那样正式。其次,如果您单击上述文本中的研究链接,您将看到我的一些早期结果。我的意思是,Dalvik 远没有 Native 代码那么快,与桌面上的 JVM 相比,还有改进的空间。还观看了 Dalvik VM 的演讲,上面的另一个链接,设计人员承认性能不是最佳的。我只是想要一些尚未在 Dalvik 上实现的优化的想法
  • 对于那些今天查看此问答并想知道的人,Android/Dalvik 的早期版本没有 JIT。 Android 2.2 为 Dalvik 引入了 JIT。 Android 2.1 在源代码中有它,但在生产版本中被禁用。

标签: android jit dalvik vm-implementation


【解决方案1】:
  1. JIT。关于它没有帮助的东西是一堆废话。您可能对 JIT 的代码更有选择性,但只有本地代码 1/10 的性能总是会受到限制

  2. 不错的 GC。现代的垃圾收集器没有大口吃。

  3. 更好的代码分析。在很多情况下,不需要进行分配/释放、持有锁等等。它允许您编写干净的代码,而不是进行机器更擅长的优化

理论上,大多数高级语言(Java、Javascript、python...)在大多数情况下应该在本机代码性能的 20% 以内。但这需要平台供应商花费 100 多个开发人员年。 Sun Java 越来越好。他们也为此努力了 10 年。

【讨论】:

  • 您的最后一点强调了选择编写 Dalvik 而不是从已建立的代码库开始的基本设计缺陷。如果他们选择 Mono,他们将比现在作为一个平台领先数年。
【解决方案2】:
  1. 更好的垃圾收集:至少压缩(以消除今天遇到的内存碎片问题),理想情况下,在收集本身时减少 CPU 密集度(以减少“我的游戏帧速率糟糕”的抱怨)
  2. JIT,正如你所引用的那样
  3. 足够多的文档,当与 NDK 结合使用时,足够疯狂的人可以将 Dalvik 字节码编译为用于 AOT 编译选项的本机代码
  4. 使其与 Android 本身分离,以便其他项目可以对其进行试验,并且社区贡献可能会以更多数量和更快的速度到达

如果您需要,我相信我可以提出其他想法。

【讨论】:

    【解决方案3】:

    Dalvik 的主要问题之一是性能,我听说这很糟糕,但我最想要的一件事是添加更多语言。

    JVM 已经有社区项目让 Python 和 Ruby 在平台上运行,甚至为它开发了特殊的语言,例如 Scala、Groovy 和 Closure。很高兴在 Dalvik 平台上看到这些(和/或其他)。 Sun 也一直致力于开发 Da Vinci 机器,这是 JVM 的动态类型扩展,这表明 Sun 在过去 15 年中一直遵循的“一种语言适合所有人”的理念发生了重大转变。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多