当前位置: 首页 > article >正文

【Python基础】内存管理机制

1. Python的内存分配
  • 何时分配内存
    • 使用对象时自动分配,查看对象内存所占大小,可以使用sys.getsizeof()   
  • 何时释放内存
    • 不再使用对象时自动释放,释放时机由解释器内部策略控制
  • 对象内存使用划分
    • 一部分用于存储对象的数据
    • 一部分用于存储对象的引用
​​​​​​​2.Python自动内存管理机制即垃圾回收机制
  • 作用:负责定期扫描并自动回收不再使用的内存和对象
  • 触发条件:
    • 手动回收
      • ​​​​​​​gc.collect()加速自动垃圾回收的速度,解决内存不足的问题
    • 引用计数
      • ​​​​​​​引用计数从0开始,被引用则计数+1
      • 引用计数变为0时有两种场景:
        • ​​​​​​​del 对象,会立即释放内存,等待复用
        • 对象=None,不会立即释放,等待自动垃圾回收
      • ​​​​​​​可以使用sys.getrefcount(对象)去查看引用计数
    • 循环引用检测
      • 对象之间相互引用会形成环状结构,使得引用计数不会降为0
      • 采用分代回收gc.set_threshold(threshold0,threshold1,threshold2):将所有对象分为0,1,2三代。所有新创建的对象都是第0代对象;当某一代对象经过垃圾回收后仍然存活,就会升级到下一代。
    • 内存池
      • 预分配固定大小的内存块
      • 延迟释放。不再使用的内存块先保留在内存池,不会立即释放给操作系统
      • 对象复用,python首选会使用已释放的内存块,减少内存分配的开销
3.Python自动内存管理机制的缺点   
  • 内存泄漏
    • ​​​​​​​对象分配了内存了,不再使用时未立即释放内存
    • 引用计数不对/循环引用
    • 数据结构设计不正确
    • 打开文件未正确关闭
  • 内存溢出
    • ​​​​​​​程序需要的内存大于系统空间的内存
  • 性能下降 
    • ​​​​​​​需要同时分配和释放内存
​​​​​​​​​​​​​​4.Python内存优化
  • 降低全局变量的使用
  • 减少创建非必要的对象

        


http://www.kler.cn/a/153418.html

相关文章:

  • 项目代码规范
  • Django的模板标签相关知识累
  • class dump使用方式和原理
  • uniapp uni-popup组件在微信小程序中滚动穿透问题
  • C/C++11 语法/概念易错总结(1)
  • 03数据仓库Flume
  • JavaScript 的 闭包
  • 快速掌握Pyqt5的2种弹簧
  • 记录华为云服务器(Linux 可视化 宝塔面板)-- 防火墙篇
  • 春秋云镜:CVE-2022-28512
  • 西北大学计算机844考研-23年计网计算题详细解析
  • CAP概念和三种情况、Redis和分布式事务的权衡
  • MySQL之锁
  • Mac 安装 Django 并连接 MySQL
  • 【设计模式】模板方法模式
  • Mapper文件夹在resource目录下但是网页报错找不到productMapper.xml文件的解决
  • 【LeetCode每日一题合集】2023.11.20-2023.11.26 (二叉树中的伪回文路径)
  • [原创]Delphi的SizeOf(), Length(), 动态数组, 静态数组的关系.
  • web前端之css变量的妙用、通过JavaScrip改变css文件中的属性值、querySelector、setProperty
  • Elasticsearch桶聚合和管道聚合