首页 > 编程知识 正文

python口述垃圾回收机制,javascript垃圾回收机制

时间:2023-05-03 19:43:48 阅读:131657 作者:3812

一、前言

Python是高级语言,像自然语言一样使用,开发时自然非常方便快捷。 其理由是Python在背后默默地做着很多事情。 其中之一是垃圾回收,解决内存管理、内存泄漏问题。

内存泄漏:由于程序不断运行,有些对象不起作用,但占用的内存没有释放,服务内存会随时间减少,最终导致系统崩溃,所以内存泄漏是一个重要问题。

二.引用计数

Python标记对象的方法是使用引用进行计数。 在以下情况下,对象的计数为1 :

1 .创建时

2 .被引用时

3 .作为参数传递函数时

相反,在以下情况下对象的计数为-1:

1 .被戴尔

2 .被重新引用

3 .函数执行完成

要显示元素的计数,请使用sys.getrefcount ()。 当引用计数为0时,释放内存。

与其他垃圾回收相比,Python机制的优点明显,是实时性的,认为Python的gc模块通过开放的接口进行管理。

也不难推测,这种缺点是性能相对较低。 我看过这样的报道,Instagram通过禁用gc模块,性能提高了10%!

三.循环引用

在某些特殊情况下,如果多个变量相互循环引用,则计数引用的机制将无法处理这些变量

a=[]

b=[]

a .应用程序(b ) )。

b .应用程序(a ) )。

打印(a,b ) ) )。

a、b的参照数均为2,不能回收两者的存储器

四.解决办法

1 .标记“”-通过清除“”解决循环调用问题。

垃圾收集器定期查找和清除此类循环调用

具体而言,从根对象的集合副本开始搜索。 这些对象的数量不是0,并且未清除

然后逐个检测,分为可到达对象和不可到达对象,下级用链表的数据结构实现,通过操作副本清除标志,判断是否为循环调用而不影响原始数据

清除最后不可到达的对象并释放内存是低效的。

诱发垃圾回收的有三种情况:

调用gc.collect (,

2.GC模块计数器达到阈值时。

3 .程序结束时

2 .分代回收,利用“空间置换”战略提高效率:

有些存储块从头到尾都是活的,有些存储块很短,所以进行垃圾回收是徒劳的

所有对象开始划分为零代,Python默认有三代,第一代是链表

年轻一代的对象优先处理,垃圾处理次数越多的人,越是“老手”就越上升,最终放在第二代。

评论:

通过检测数量是否达到阈值来确定Python垃圾收集机制。

Python这方面的源代码是c写的,暂时不知道,等你了解链表结构后再拿去研究。

gc模块留待今后的研究。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。