Loading

垃圾回收机制


1.什么是垃圾回收机制

  • 内存的空间是有限的,当一个变量值没有用时,就要考虑将其回收,释放掉所占用的空间。而垃圾回收机制(简称GC)是python自带的一种机制,咱们回收那些占用着内存的垃圾。
  • 垃圾的危害,内存大小是有限的,如果垃圾堆积太多,会导致计算机卡顿,严重点会崩溃

2.垃圾回收机制原理

- 1.引用计数

变量值被变量名关联的次数
一旦引用计数变成0,其占用的内存地址就要被解释器的垃圾回收机制回收

- 2.循环引用

- 3.标记清除

- 标记

通俗地讲就是:
栈区相当于“根”,凡是从根出发可以访达(直接或间接引用)的,都称之为“有根之人”,有根之人当活,无根之人当死。有效避免了循环引用的情况。
具体地:标记的过程其实就是,遍历所有的GC Roots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),然后将所有GC Roots的对象可以直接或间接访问到的对象标记为存活的对象,其余的均为非存活对象,应该被清除。
- 清除
清除的过程将遍历堆中所有的对象,将没有标记的对象全部清除掉。

- 4.分代回收

分代指的是根据存活时间来为变量划分不同等级(也就是不同的代)新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,如果发现变量依然被引用,那么该对象的权重(权重本质就是个整数)加一,当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,青春代的gc扫描的频率低于新生代(扫描时间间隔更长),假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,节省了扫描的总时间,接下来,青春代中的对象,也会以同样的方式被移动到老年代中。也就是等级(代)越高,被垃圾回收机制扫描的频率越低

综上

垃圾回收机制是在清理垃圾&释放内存的大背景下,允许分代回收以极小部分垃圾不会被及时释放为代价,以此换取引用计数整体扫描频率的降低,从而提升其性能,这是一种以空间换时间的解决方案

posted @ 2021-11-03 01:49  爱learn  阅读(120)  评论(0编辑  收藏  举报