在Android中一个方法在art中对应一个ArtMethod,ArtMethod中保存着方法的 类、访问权限和执行地址等信息。
在Android6.0中,art虚拟机的ArtMethod的结构是这样的:/art/runtime/art_method.h class ArtMethod中成员变量
这里写图片描述

Art 与AOT

art 可以采用 解释模式 或者 AOT模式执行。
解释模式就是取出dex code,逐条解释执行。这个时候回取这个方法的entry_point_from_interpreter_然后跳转执行。
AOT模式是”Ahead of time”,在安装时将dex code 优化成机器码,运行时直接执行机器码执行。调用这个方法时会调用entry_point_from_quick_compiled_code_,然后跳转执行。

只要替换上面两个指针就可以实现热替换了吗?

答案肯定不是的,因为无论是解释模式还是AOT执行当中还会用到ArtMethod中的其他字段。比如dex_cache_resolved_methods_,比如AOT模式下虽然已经编译成机器码,但是机器码是不能脱离虚拟机单独运行的。例如在AOT模式下调用一个方法时,获得ArtMethod中dex_cache_resolved_methods_,这是一个存放ArtMethod*的指针数组,通过它可以获得ArtMethod所在dex所有Method对应的ArtMethod*。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐