垃圾回收机制

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 垃圾回收机制,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文


1.什么是垃圾回收机制

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

2.垃圾回收机制原理

– 1.引用计数

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

– 2.循环引用

– 3.标记清除

- 标记

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

– 4.分代回收

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

综上

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/144033.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!