垃圾回收机制
GC 垃圾回收
- 找到内存空间中的垃圾
- 回收垃圾,让程序员能再次利用这个空间
别备的接触
常用的 GC 算法
1.引用技术
2.标记-清除算法
标记阶段: 把所有活动对象做上标记。
清除阶段: 把没有标记(也就是非活动对象)销毁。
标记阶段:根可以理解成我们的全局作用域,GC 从全局作用域的变量,沿作用域逐层往里遍历(对,是深度遍历),当遍历到堆中对象时,说明该对象被引用着,则打上一个标记,继续递归遍历(因为肯定存在堆中对象引用另一个堆中对象),直到遍历到最后一个(最深的一层作用域)节点。
清除阶段: 又要遍历,这次是遍历整个堆,回收没有打上标记的对象。
解决 循环引用的问题:因为两个对象从全局对象出发无法获取。因此,他们无法被标记,他们将会被垃圾回收器回收。
空闲链表:空闲链表(保存堆中所有空闲地址空间的地址形成的链表)一直遍历到尾端
GC 方式是一个定时运行的任务,也就是说当程序运行一段时间后,统一 GC,
优点:
1. 解决循环饮用这种现象
2. 只有打和不打两个标记
缺点:
1.造成碎片化(有点类似磁盘的碎片化
2.再分配时遍次数多,如果一直没有找到合适的内存块大小,那么会遍历空闲链表(保存堆中所有空闲地址空间的地址形成的链表)一直遍历到尾端
复制
1. 只把某个空间的活动对象复制到其他空间。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论