引言
接App优化之内存优化(序), 作为App优化系列中内存优化的一个小部分.
由于内存相关知识比较生涩, 内存优化中使用到的相关工具, 也有很多专有名词. 对Java内存管理, GC, Android内存管理, Dalvik/ART等知识有一个理论的认识, 可以让我们更好的使用这些工具, 分析内存问题.
据此, 我们就先从理论入手, 聊聊GC那些事儿.
1, 何为GC
GC 是 garbage collection 的缩写, 垃圾回收的意思. 也可以是 Garbage Collector, 也就是垃圾回收器.
1.1 垃圾回收器
我们先来解释下Garbage Collector(垃圾回收器).
内存管理, 一直是编程中的一个大的问题. 在较老的语言中, 例如C++语言中, 内存管理是显式的, 也就是说使用者自己申请内存使用, 自己释放内存. 这就是为什么C++语言中除了构造函数, 还有析构函数. 我们在创建对象的时候调用构造函数创建, 系统会在对象结束其作用域的时候调用析构函数, 我们需要做的就是在析构函数中释放掉我们申请的相关资源, 以便释放内存地址.
显然, 这种显式的由编程人员自己控制释放内存的方式很容易出问题, 忘了, 漏了, 都可能导致内存问题. 也不符合程序员要懒的特征.
故而, Java语言中引入了自动内存管理的机制, 也就是垃圾回收器. 大部分的现代面向对象语言, 也都是采用自动内存管理机制.
内存自动管理回收机制可以解决大部分, 但不是所有的内存问题, 这也是为什么我们要讨论内存泄露.
垃圾回收器的职责
垃圾回收器有三大职责:
- 分配内存;
- 确保任何被引用的对象保留在内存中;
- 回收不能通过引用关系找到的对象的内存.
垃圾回收的一般流程
![Slice 1](http://oat9lzupi.bkt.clouddn.com/Slice 1.jpg)
1.2 相关概念
垃圾回收(GC)
垃圾回收器中有一个进程来做上面的这些事情, 这个进程查找我们的对象引用的