观前提醒
为了能够锻炼自己,我会查阅大量外文不停的修改内容,少部分会提示成中文。
可能有误,请见谅
提示:若是觉得阅读困难,可以看如下内容
- 脚本之家可获取,若失效可私信
- 浏览器的沙拉查词扩展(推荐谷歌和Edge浏览器)
GC Algorithms 学习GC之前
目标
- 了解有关数据结构
- 这些数据结构堆GC(Garbage Collection)所起作用
对象(Object)
GC的概念:通过应用程序利用的数据的集合
书本为了方便理解,域的大小设为1字节,如下图
- 头
概念:保存对象本身信息
信息:
- 对象的大小
- 对象的种类
- 域
概念:在对象中可访问的部分
数据类型
- 指针:指向内存空间中某块区域的值
- 非指针:在编程中直接使用的值本身,比如数值、字符以及布尔值。
限制
- 不能改头信息
- 可以引用或替换对象的域值
指针
mutator
堆
概念:执行程序时存放对象的内存空间
程序按照mutator的要求在堆中存放对象
- 1、堆被对象占满时,GC分配用于堆的内存空间
- 2、GC分配不够可用空间
扩大堆,继续分配可用空间(现实操作)
销毁所有计算结果,报错(书本操作)
活动对象(Active Object)与非活动对象
分配
根
熟悉树的概念就知道根在代码中干嘛用的了。
分块(chunk)
概念:为利用对象而事先准备出来的空间
流程:
1、According to the mutator’s requirements, our program will divide this chunk into appropriate sizes and use it as an active object.
2、The object is soon converted into the garbage and recycled.
3、At this point, this part of the reclaimed memory space(译:内存空间) becomes chunked again, in preparation for the next use.
评价标准
吞吐量、堆使用效率和最大暂停时间不可兼得
- 吞吐量
在单位时间内的处理能力
不要只看是哪种类型的GC,还要考虑mutator的动作
- 最大暂停时间
因执行 GC 而暂停执行 mutator 的最长时间,可以想象成你玩电脑游戏的帧数,启动程序的等待时间。
- 堆使用效率
头的大小,越小越好
相应的堆越大越好,GC会更快
- 访问的局部性
条件:越是高速存取的存储器容量就越小。
The high-speed memory capacity is small, so it is necessary to store data in memory, and the CPU reads data from memory to the cache when needed.
作用:
具有引用关系的对象之间通常很可能存在连续访问的情况(访问的局部性的概念)。
恰好一个对象要被放入cache,与其具有关系的对象也被拉入(好兄弟一起垫背)