python的内存管理
来源:互联网 发布:数据交易呢主体 编辑:程序博客网 时间:2024/05/19 13:08
python中的内存管理是通过引用计数和垃圾回收模块实现。
一般情况下python在堆中new出来的对象都是通过引用计数来管理的,当引用计数为0的时候,就会立即通过tp_dealloc方法释放对象。注意这里是tp_dealloc而不是free。因为很多对象都会有缓存机制,比如new出来的int对象在释放的时候都会放回到free_list中,而不是将int对象所占用的内存free调了,还给系统。
但是引用计数管理没法回收两个相互引用的对象,因为他们的引用计数永远都不会为零,所以垃圾回收模块(GC)就是用来打破对象之间相互引用的循环。被GC模块管理的对象都是container对象,因为只有container对象才能有对其他对象的引用,才会发生对象相互引用的问题。比如list, dict, tuple。
container对象在堆上被new出来的时候通过通过_PyObject_GC_Malloc这个接口实现的,主要是为了都能把这些对象通过双向链表管理起来,在对象被销毁的时候通过_PyObject_GC_UNTRACK接口将对象从链表中摘除。
在GC模块中还有一个份代收集的问题,好啦,这个在书里讲的更清楚点,还是看书吧。
关于内存管理的python代码风格:
在代码中慎用__del__
方法,因为GC模块无法回收有__del__
方法的对象,因为python无法保证他们能安全的被回收。所以你要保证这个对象能通过引用计数的方式完成对象的回收动作,但是谁知道呢,总会有不小心的时候。
如果不使用__del__
方法,但是有些动作想在对象被销毁的时候搞一把,怎么办。可以通过weakref来实现这个操作。这个后面写吧。
- Python的内存管理
- Python的内存管理
- python 的内存管理
- Python的内存管理
- Python的内存管理
- Python 的内存管理
- Python的内存管理
- python的内存管理
- Python的内存管理
- Python的内存管理
- Python的内存管理
- python的内存管理
- python的内存管理
- Python的内存管理
- Python的内存管理
- python 内存管理的体会
- Python深入06 Python的内存管理
- python内存管理与Memcached内存管理的理解
- 字符串左右移动(java实现)
- 你真的会玩SQL吗?实用函数方法汇总
- 并行机器最短调度问题
- github简明教程
- 数据库连接配置3 -- C3P0数据源
- python的内存管理
- Android进阶-复杂的UI框架(一)
- 关于message的消息传递简单的小例子,带部分注释
- MySQL学习笔记-04_Server_Config
- Android Resource Types之Drawable简介
- 【C++】两个队列实现一个栈
- Android进阶-多个ViewPager嵌套时事件传递的处理
- Linux Socket编程(不限Linux)
- 欢迎使用CSDN-markdown编辑器