GC学习读书笔记(一) 基本概念介绍
来张封面镇楼 需要pdf的私聊哦
image.png
1.关于GC基本概念定义
GC的定义:GC 是 Garbage Collection 的简称,中文称为“垃圾回收”。
GC做的事情:1. 找到内存空间里的垃圾 2. 回收垃圾,让程序员能再次利用这部分空间
GC的历史:GC标记 -清除算法→引用计数法→GC复制算法
对象:一般来说,对象由头(header)和域(field)构成
头:一般头部包括以下信息,1.对象的种类 2.对象的大小 在标记清除算法中会在头部添加一个标志位来判断当前对象时候被标记,对象使用者一般无法直接修改头中的信息
域:域中的数据类型大概分两种1.具有指针的数据类型2.非指针数据类型
使用给一张图来表示 对象、头、和域的关系
image.png
mutator:指的是应用程序 mutator的实际操作有两种 1. 生成对象2.更新指针
堆:指的是用于动态(也就是执行程序时)存放对象的内存空间,当 mutator 申请存放对象时,
所需的内存空间就会从这个堆中被分配给 mutator。
HEAP_SIZE:堆的固定大小
heap_end:定为指向堆末尾下一个地址的指针。
三个关系如下图
活动对象:被mutator持有引用的对象
非活动对象:死掉的对象,即要回收的垃圾
分配:分配(allocation)指的是在内存空间中分配对象。当 mutator 需要新对象时,就会向分配
器(allocator)申请一个大小合适的空间。分配器则在堆的可用空间中找寻满足要求的空间,
返回给 mutator
分块:分块(chunk)在 GC 的世界里指的是为利用对象而事先准备出来的空间。
初始状态下,堆被一个大的分块所占据,然后根据mutator 大小分割成合适的大小,作为活动的对象使用。
在垃圾回收后 ,被回收部分的内存空间在此成为分块,为下次利用做准备.
也就是说,内存里的各个区块都重复着分块→活动对象→垃圾(非活动对象)→
分块→ ……这样的过程.
根:也就是GCRoot的对象包含,调用栈、寄存器以及全局变量空间
评价一个GC算法的4个标准:
1.吞吐量:在单位时间内的处理能力
2.最大暂停时间:最大暂停时间指的是“因执行 GC 而暂停执行 mutator 的最长时间”
3.堆使用效率:左右堆使用效率的因素有两个。一个是头的大小,另一个是堆的用法
4.访问的局部性:考虑到访问的局部性,把具有引用关系的对象安排在堆中较近的位置,就能提高在缓存中读取到想利用的数据的概率,令 mutator 高速运行。