[笔记] Memoery Managerment -Efficient Android Threading

《Efficient Android Threading》
Chapter 6 Memoery Managerment

Garbage Collection

DVM 是一个使用内存回收器从共享内存中频繁回收内存的内存管理系统,比如堆,当增长过于大时。
Gingerbread 2.3 版本和以下 GC 是 顺序执行 的,可能会在渲染UI时GC,这是可能会影响用户体验。
Honeycomb 后,GC 开始在自己的线程中并发执行,不会停止应用线程。
Dalvik GC 使用非常广泛的 两部机制,标记和清除,mark and sweep。
标记步骤 是 遍历对象树,将不被任何其他对象引用的对象标记为 不再用,不用的对象将会被当做垃圾回收,sweep 步骤就是释放所有的标记对象。
线程可能引发内存泄露。

GC root

当启动一个线程时,线程对象本身就是 GC root。它引用的所有对象都可达。
所有的可从运行的 Runnable 中可达的对象都是GC root。

Memory Leak

  • 内部类持有外部类引用
  • 静态内部类不会持有外部类引用,但是向内部静态类传入的对象如果持有外部类引用,还是有可能会造成内存泄露
  • 生命周期错乱,当 Activity 已经 destroy,还有线程在执行时可能会引发内存泄露。

Avoiding Memory Leaks

  • Use tsatic Inner Classes,比如 handler 类
  • Use Weak References
  • Stop Worker Thread Execution
  • retain worker threads
  • clean up the message queue

看完 Part I Fundamentals 部分了,明天开始看 Part II Asynchronous Techniques 部分了。

你可能感兴趣的:([笔记] Memoery Managerment -Efficient Android Threading)