ART重新定位boot.art&默认情况下,在/system/framework/arm/
到/data/dalvik-cache/arm/
下的boot.oat。
为什么艺术品喜欢使用缓存的而不是系统?
为什么不在/system
下使用启动图像?
答案 0 :(得分:0)
我想,在Android L& M,boot.art和boot.oat使用绝对地址加载boot.art& boot.oat。但是,有时候,ART无法将它们加载到特殊的基址,因此,ART会将它们加载到另一个基址。因此,ART必须在boot.art中重新定位类的地址。
参见代码:./ runtime / gc / space / image_space.cc RelocateImage
std::string base_offset_arg("--base-offset-delta=");
StringAppendF(&base_offset_arg, "%d", hooseRelocationOffsetDelta(ART_BASE_ADDRESS_MIN_DELTA, ART_BASE_ADDRESS_MAX_DELTA));
base-offset-delta用于计算boot.art中类的新地址。