虚拟机调用方法之ArtMethod
在Android中一个方法在art中对应一个ArtMethod,ArtMethod中保存着方法的 类、访问权限和执行地址等信息。 在Android6.0中,art虚拟机的ArtMethod的结构是这样的:/art/runtime/art_method.h class ArtMethod中成员变量 Art 与AOT art 可以采用 解释模式 或者 AOT模式执行。 解释模式就是取出dex code
在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*。
更多推荐










所有评论(0)