关闭Dalvik VM的所有优化

lie*_*nas 5 performance android dalvik

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

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

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

任何确认方式都非常感谢.

fad*_*den 5

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

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

最大的变异来源是Dalvik的JIT编译器,您可以禁用它-Xint:fast.有关如何配置此系统范围的说明,请参阅此稍微过时的文档.