关于ART热修复内存地址错乱

来源:9-4 Tinker 如何实现热修复?

刺目啊1199

2020-04-11

老师,想问以下热修复在ART下发生内存地址错乱的原因是什么?
我看在这篇文章
https://www.jianshu.com/p/fa593cf27b5d)
里举的例子下,Android7以下是不会发生内存错乱的。那么Android 7以下热修复导致ART内存错乱的原因是什么呢?是内联?还是其他什么原因?

写回答

1回答

bennyhuo

2020-04-12

文章分析的挺好的。

热修复这个东西其实稍微有个细节处理的不好就很容易出问题。Tinker 在实践时遇到的 Android N 当中地址错乱的问题,微信的研发团队也表示难以复现,所以同学给出的文章里面在 N 上没有遇到也是可以理解的。

同学可以参考下 Tinker 团队的文章:https://cloud.tencent.com/developer/article/1030971

简单来说就是混合编译会导致部分代码被编译成机器码,如果这部分代码恰好在热修复的代码当中,那么就会出现错乱的问题。

0
2
刺目啊1199
最近学习了一下,ART内存错乱暂时知道有三个原因: 1. dexopt指令优化 2. 内联 3. Android N的oat预加载
2020-04-24
共2条回复

大厂资深面试官 带你破解Android高级面试

改变视野和思维 深度与广度兼备的 Android 进阶面试指导课程

1636 学习 · 222 问题

查看课程