Python 内存

发布时间: 更新时间: 总字数:388 阅读时间:1m 作者: 分享 复制网址

Python 内存

介绍

垃圾回收

  • 查看某个对象的引用计数,得到的值会比期望的多 1(该调用的临时引用)
sys.getrefcount(obj)
  • 当使用如 del 等释放变量时,引用计数若变为 0,当垃圾回收时会清空内存
  • 垃圾回收时,会STW(stop the world),不进行其他任务,频繁的垃圾回收会大大降低效率
  • Python 运行时,会标记对象分配/取消(object allocation/object deallocation)的次数,当两者的差值高于某阈值时,来回启动垃圾回收
    • 700: 即上面说的阈值
    • 10: 每10次0代垃圾回收,会调用一次1代垃圾回收
    • 10: 每10次1代垃圾回收,会调用一次2代垃圾回收
>>> import gc
>>> gc.get_threshold()
(700, 10, 10)
  • 手动启动垃圾回收
>>> import gc
>>> gc.collect()
  • 分代回收
    • 0 代:所有新建的对象都是 0 代对象
    • 若某一代对象经历垃圾回收后依然存活,则被归入下一代对象

内存池

  • Python 的大内存和小内存以 256K 为分界
    • 大内存使用 malloc 分配
    • 小内存使用内存池分配
  • 内存池
    • 第3层:对Python对象直接操作
    • 第2层/第1层:每次申请内存不会自动释放,不使用时放入内存池
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数