.Python 是如何进行内存管理的?
答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制
⒈对象的引用计数机制
Python 内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。
引用计数增加的情况:
❶一个对象分配一个新名称
❷将其放入一个容器中(如列表、元组或字典)
引用计数减少的情况:
❶使用 del 语句对对象别名显示的销毁
❷引用超出作用域或被重新赋值
sys.getrefcount( )函数可以获得对象的当前引用计数
多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器会在程序的
不同部分共享内存,以便节约内存。
⒉垃圾回收
❶当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。
❷当两个对象 a 和 b 相互引用时,del 语句可以减少 a 和 b 的引用计数,并销毁用于引用底层对象的名
称。然而由于每个对象都包含一个对其他对象的应用,
因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执
行一个循环检测器,搜索不可访问对象的循环并删除它们。
⒊内存池机制
Python 提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
❶Pymalloc 机制。为了加速 Python 的执行效率,Python 引入了一个内存池机制,用于管理对小块内存
的申请和释放。
❷Python 中所有小于 256 个字节的对象都使用 pymalloc 实现的分配器,而大的对象则使用系统的
malloc。
❸对于 Python 对象,如整数,浮点数和 List,都有其独立的私有内存池,对象间不共享他们的内存池。
也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数

最新文章

  1. IaaS, PaaS, SaaS 解释
  2. Linux内核--网络栈实现分析(五)--传输层之UDP协议(上)
  3. apache2下部署node.js应用程序
  4. Eclipse安装ADT插件
  5. hdu 2851(最短路)
  6. Pascal 线段树 lazy-tag 模板
  7. 快速构建Windows 8风格应用15-ShareContract构建
  8. Inside The C++ Object Model(四)
  9. Ubuntu16.04中安装搜狗输入法
  10. BackBone.js之Router
  11. Knockout: 实践CSS绑定和afterkeydown事件, 给未通过校验的输入框添加红色边框突出显示; 使用afterkeydown事件自动将输入转大写字母.
  12. C#集合中的Add与AddRange方法
  13. 批量 truncate 表
  14. 快速重启 Quick Boot plus
  15. XE7 数据库独立运行需要的文件
  16. Intelij IDEA 配置Tomcat时找不到 “Application Server”
  17. Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) E. Down or Right
  18. $sanitize和$sce服务的使用方法
  19. QRegExp
  20. ecmall模板编辑中的标题如何自定义读取

热门文章

  1. break , continue 和 标签 跳出循环
  2. cmake -help
  3. Delphi 中多线程同步的一些处理方法
  4. 归并排序c语言
  5. Java设计模式简单总结
  6. CometOJ Contest #3 C
  7. gdb常用功能
  8. React:styled-components
  9. Python服务端工程师就业面试指导✍✍✍
  10. 第一周课堂笔记1th