垃圾回收(一)
1. ⼩整数对象池
整数在程序中的使⽤⾮常⼴泛,Python为了优化速度,使⽤了⼩整数对象
池, 避免为整数频繁申请和销毁内存空间。
Python 对⼩整数的定义是 [-5, 257) 这些整数对象是提前建⽴好的,不会被
垃圾回收。在⼀个 Python 的程序中,所有位于这个范围内的整数使⽤的都
是同⼀个对象.
同理,单个字⺟也是这样的。
但是当定义2个相同的字符串时,引⽤计数为0,触发垃圾回收
垃圾回收(二)
现在的⾼级语⾔如java,c#等,都采⽤了垃圾收集机制,⽽不再是c,c++⾥
⽤户⾃⼰管理维护内存的⽅式。⾃⼰管理内存极其⾃由,可以任意申请内
存,但如同⼀把双刃剑,为⼤量内存泄露,悬空指针等bug埋下隐患。 对于
⼀个字符串、列表、类甚⾄数值都是对象,且定位简单易⽤的语⾔,⾃然不
会让⽤户去处理如何分配回收内存的问题。 python⾥也同java⼀样采⽤了垃
圾收集机制,不过不⼀样的是: python采⽤的是引⽤计数机制为主,标记-清
除和分代收集两种机制为辅的策略
垃圾回收机制
Python中的垃圾回收是以引⽤计数为主,分代收集为辅。
引⽤计数机制的优点:
简单
实时性:⼀旦没有引⽤,内存就直接释放了。不⽤像其他机制等到特定时机。实时性还带来⼀个好处:处理回收内存的时间分摊到了平时。
引⽤计数机制的缺点:
维护引⽤计数消耗资源
循环引⽤循环引⽤导致内存泄露,注定python还将引⼊新的回收机制。(标记清除和分代收集)
gc模块常⽤功能解析
gc模块提供⼀个接⼝给开发者设置垃圾回收的选项 。上⾯说到,采⽤引⽤计数的
⽅法管理内存的⼀个缺陷是循环引⽤,⽽gc模块的⼀个主要功能就是解决循
环引⽤的问题。