1.GC是发生在堆中的行为
GC,被称为垃圾回收,是一种发生在堆中的行为。
一般的GC程序做的只有两件事:
- 找到内存空间中的垃圾
- 回收垃圾,让这部分无意义被占用的空间得到再利用
2. GC算法分类
- 标记-清除算法
- 引用计数法
- GC复制算法
- 标记-整理
- …
3.对象
GC中的对象主要是由头(header)和域(field)构成的
- 头,又称为对象头主要放置对象的大小对象的种类
- 域,主要是对象的使用者操作的部分,域中的数据类型分为指针和非指针,一个对象会含有一个或多个域
4.mutator
简单理解为:“应用程序”。GC就是在这个程序中工作的程序。mutator有两种操作:
- 生成对象
- 更新指针
伴随这mutator的操作,内存空间就会产生垃圾,负责回收这部分垃圾的机制就是GC
5.堆
堆,是指执行程序时存放对象的内存空间,当mutator生成对象是申请的空间就是从这里分配的,GC回收对象实际就是管理对中已分配对象的机制。
在堆中可以被mutator引用到的对象叫做活动对象,不能引用到的叫做非活动对象。GC会销毁非活动对象,释放其占用的空间
6.分配
分配(allocation)指的是在内存空间中分配对象。当mutator生成新对象需要空间时,就会向分配器(allocator)申请一个大小合适的空间,分配器根据特定算法从堆中找到合适的满足要求的空间返回给
mutator
7.分块
分块(chunk)指为对象事先准备的空间,初始状态下堆被一个巨大的分块占据。分配器会根据mutator的要求把大的分块分割成合适的大小,作为活动对象使用。非活动对象会发生GC回收内存空间再次标称分块,为下次使用做准备。也就是说内存中各个块区都重复着分块—活动对象—非活动对象----分块—…
8.根
根(root)在GC中可以理解为指向对象指针的“起点”部分。
如图中所示root即为根,由根引用到的对象A,对象A引用到的对象B即为活动对象,对象C无引用即为活动对象。
9.评价GC算法性能的标准
-
吞吐量
-
最大暂停时间
-
堆使用效率
-
访问的局部性
…