• android GC内存回收小析


    由于时间问题,简单的谈谈自己的理解。

    大家都知道,在android开发中,不需要自己去管理,有垃圾回收机制会自动帮我们去回收

    没有被引用到的对象。

    那垃圾回收机制到底是怎样的呢?下面列出本人的一些理解。

    垃圾回收的线程:

    之前是在主线程做的,后面移到优先级比较低的线程中进行。

    之前是单一线程,后面是多线程。

    垃圾回收的时机:

    app空闲的时候

    内存紧张的时候

    分配大的内存块不够用的时候。

    回收的方式:

    不采用分代技术:会一次性gc会遍历所有的对象,这样很费时

    采用分代技术:分为年轻代,老年代,持久代。这样可以把生命周期短的,大小小的对象放到年轻代去

    一次gc可以只遍历年轻代,只要释放的内存足够就可以不去遍历老年代等。

    回收起点:

    垃圾回收线程会从“根集(Root Set)”开始进行对象引用的遍历。

    所谓的“根集”,就是正在运行的线程中,可以访问的引用变量 的 集合(比如所有线程当前函数的参数和局部变量、当前类的成员变量等等)。

    垃圾回收线程先找出被根集直接引用的所有对象(不妨叫集合1),

    然后再找出被集合 1直接引用的所有对象(不妨叫集合2),

    然后再找出被集合2直接引用的所有对象......如此循环往复,直到把能遍历到的对象都遍历完。

    凡是从根集通过上述遍历可以到达的对象,都称为可达对象或有效对象;反之,则是不可达对象或失效对象(也就是垃圾)。

    回收的算法:

    引用计数

    标记法

    对象树

    回收的监控

    可以重写Object finalize()函数。这个函数会在Object回收之前被调用

    详细信息可以查阅下面地址:

    http://hulefei29.iteye.com/blog/658546

  • 相关阅读:
    MD5 Message Digest Algorithm in Visual Basic 6
    遍历指定文件夹的指定格式的文件并且copy到指定的文件夹下面
    宝宝的成长脚印8/17
    儿歌童谣两首
    office2003之資料編輯列的角字顯示7/10
    宝宝的成长脚印8/27
    宝宝的成长脚印7/30
    宝宝的成长脚印7/3
    LED手电筒真不咋滴8/27
    液晶显示器右边出现黑条7/7
  • 原文地址:https://www.cnblogs.com/lzl-sml/p/3996283.html
Copyright © 2020-2023  润新知