• Python的内存管理机制


    Python是如何进行内存管理的?

     一、 Python 是动态类型语言,对象的类型和内存占用都是运行时确定的。

    (变量无须事先声明,无须指定类型,程序员不用管内存管理,变量名会被“回收”,del 语句能直接释放资源)。Python 解释器承担了内存管理的复杂任务。

    二、Python 解释器通过以下三种方式来管理内存:

    ①对象的引用计数机制; ②垃圾回收机制;③内存池机制。

    2.1 对象的引用计数机制

    对象的引用计数增加:

    对象被创建;或另外的别名被创建;或被作为参数传递给函数;或成为容器对象的一个元素。

    对象的引用计数减少:

    使用 del 语句对对象别名或对容器对象进行显示销毁时;引用超出作用域 或者对象的别名被赋值给其他对象时。

    对于不可变数据,Python 解释器会在程序的不同部分共享内存,以便节省内存。

    2.2 垃圾回收机制

    1.当一个对象的引用计数为 0 时,它将被垃圾收集器释放内存。

    2.特定情形会导致循环引用,如两个对象 a,b 互相引用时,del 语句可以减少 a,b 的引用次数,但由于每个对象都包含一个对其他对象的引用,因此引用计数不会归零,对象也不会被销毁,此时需要借助 Python 垃圾收集器的另一个东西:循环垃圾收集器,它定期执行,搜索不可访问对象的循环并删除它们。

    2.3 内存池机制

    Python 将不用的内存放到内存池而不是返回给操作系统。

    Pymalloc 机制:用于管理对小块内存的申请和释放。

    Python 中所有小于 256 字节的对象都使用 pymalloc 实现的分配器,而大的对象使用系统的 malloc。

    对于 Python 对象,如整数,浮点数,和 list 等,都有其独立的私有内存池,对象间不共享它们的内存池。

  • 相关阅读:
    redis消息队列
    redis数据结构及使用场景
    HTTP状态码
    ASP.NET处理管道初谈
    kNN(k邻近算法)
    HeadFirst
    Python学习笔记——进程、线程、网络编程
    Python学习笔记-20180428——处理JSON
    Python学习笔记-20180426
    基于百度地图的 JavaScript API示例学习
  • 原文地址:https://www.cnblogs.com/yanmk/p/9544430.html
Copyright © 2020-2023  润新知