Android与iOS内存回收机制区别

作者: 土豆吞噬者 | 来源:发表于2018-11-07 21:28 被阅读25次

    iOS的内存回收机制

    IOS采用引用计数算法回收内存,当对象引用计数为0时,对象会执行反初始化方法并被回收。如果两个对象互相引用对方,就会造成循环强引用,导致内存泄漏。

    Android内存回收机制

    Android采用的是根搜索算法回收内存,该算法通过GC Roots作为起点搜索,搜索通过的路径称为引用链,当一个对象没有被GC Roots的引用链连接的时候,这个对象就会被回收。即使A和B两个对象互相引用对方,只要A和B都不在引用链上,这两个对象都会被回收。

    下图中的每个圆节点代表对象,箭头代表可达路径,当圆节点与 GC Roots 存在可达路径时,表示无法回收(黄色圆节点),反之则可以回收(蓝色圆节点)。


    GC Root

    • 虚拟机栈(栈帧中的局部变量)中的引用的对象。
    • 方法区域中的类静态属性引用的对象。
    • 方法区域中常量引用的对象。
    • 本地方法栈中 JNI(Native 方法)的引用的对象。
    • 运行中线程引用的对象

    相关文章

      网友评论

        本文标题:Android与iOS内存回收机制区别

        本文链接:https://www.haomeiwen.com/subject/shubxqtx.html