android - 关闭 Dalvik VM 的所有优化

标签 android performance dalvik

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

  1. 手写Java字节码
  2. 使用“dx”命令将其转换为dex文件
  3. 使用指定了“-Xverify:none -Xdexopt:none”参数的“dalvikvm”命令(通过 adb shell)在程序上运行它

我的问题是:这实际上会避免所有优化吗?之前的讨论在这里https://groups.google.com/forum/#!topic/android-platform/Y-pzP9z6xLw让我不确定,我无法通过阅读文档 100% 说服自己。

非常感谢任何一种方式的确认。

最佳答案

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

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

最大的变化来源将是 Dalvik 的 JIT 编译器,您可以使用 -Xint:fast 禁用它。参见 this slightly outdated doc有关如何在系统范围内配置此内容的说明。

关于android - 关闭 Dalvik VM 的所有优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20663083/

相关文章:

java - 在虚拟机(即 Dalvik)中运行的垃圾收集语言的内存泄漏类型

android - 即使应用程序处于非 Activity 状态,CursorLoader 如何自动更新 View ?

c# - 通过强制转换为 uint 而不是检查负值来执行范围检查是否更有效?

java - Android 上的字符串复制

android - android dalvik vm 是否使用逃逸分析优化?

python - for 或 while 循环做 n 次

Android OpenGL queueEvent 为什么?

android - 如何在 Android 上创建用于访问 OData 服务的代理

android - RecyclerView 在到达数据末尾时崩溃

java - 如何避免 Java 游戏中的垃圾收集延迟? (最佳实践)