关闭Dalvik VM的所有优化

时间:2013-12-18 16:14:10

标签: android performance dalvik

所以我正在尝试为Android编写一些低级代码,我主要担心的是我想通过JIT编译器(或其他任何东西)避免所有优化。在做了一些研究后,最好的方法似乎是:

  1. 手写Java字节码
  2. 使用“dx”命令将其转换为dex文件
  3. 使用“dalvikvm”命令(通过adb shell)在程序上运行它,并指定“-Xverify:none -Xdexopt:none”参数
  4. 我的问题是:这实际上会避免所有优化吗?之前的讨论https://groups.google.com/forum/#!topic/android-platform/Y-pzP9z6xLw让我不确定,我不能100%通过阅读文档来说服自己。

    非常感谢任何确认方式。

1 个答案:

答案 0 :(得分:5)

dexopt执行的某些指令重写无法禁用。例如,对volatile long字段的访问必须与访问long字段的方式不同,并且通过用不同的指令替换field-get指令来处理特化。

dexopt执行的优化采用指令替换的形式,通常是某种“加速”,允许VM少做一点工作。所有这些优化都是提前静态执行的,而不是在运行时动态执行,因此您将获得一致的行为。启用dexopt优化不会引入未知数,它只是从一组知识变为另一组知识。

最大的变异来源是Dalvik的JIT编译器,您可以使用-Xint:fast禁用它。有关如何在整个系统范围内进行配置的说明,请参阅this slightly outdated doc