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

Python生命周期及内存管理

文章目录

  • 一、Python的生命周期
    • 1、概念
    • 2、如何监听生命周期
  • 二、内存管理
    • 1.存储
    • 2.垃圾回收
    • 3.引用计数

一、生命周期:

        1、概念:一个对象从创建到消亡的过程

        当一个对象呗创建是,会在内存中分配响应的内存空间进行存储
        当这个对象不再使用,为了节约内存,会把这个对象释放

        2、如何监听生命周期:

                1、(__new__):当我们创建一个对象时,用于给这个对象分配内存,通过拦截这个方法,可以修改创建对象的过程:例如单例模式

        使用使用装饰器(使用了装饰器的类会变成单例类)

def single_class(cls):instance = {}def single(*args, **kwargs):if cls not in instance:instance[cls] = cls(*args, **kwargs)return instance[cls]else:return instance[cls]return single@single_class
class Man(object):pass
man1 = Man()
man2= Man()
print(man1)
print(man2)


                2、(__init__):实例化对象的时候执行此方法
                3、(__del__):进程结束的时候执行

二、内存管理机制

1.存储方面

        1、万物皆对象

        2、所有对象都会开辟内存存储

        3、整形及短小字符Python会缓存,不会创建多个相同对象

        4、容器对象,仅仅是其他对象的引用,不是对象本身


2、垃圾回收

        1、引用计数

                1、概念:一个对象记录着本身被引用的次数

                2、描述:当增加一个引用,计数+1;当减少一个引用,计数-1;引用=0时释放内存

                3、计数+1场景:对象创建;对象被引用;对应被当做参数传入函数;对象被当做元素放在容器中

                 4、计数-1场景:被显试销毁;引用别名被赋值(覆盖);离开作用域(函数执行结束);容器销毁

                查看计数:sys模块

        2、垃圾回收

                1、作用:解决引用计数未释放的对象(容器对象)

                2、底层机制

                        1、收集容器对象 通过双向连表引用
                        2、对每个容器,通过变量gc_refs记录引用计数
                        3、找到引用他的容器,然后计数-1
                        4、经过三个步骤,如果计数为0,就可以释放了

                3、分代回收(减少垃圾检测的频率)(新增对象达到一定数量才会触发)

                        1、默认刚创建的对象属于0代
                        2、如果经历一代回收,依然存活,就划分下一代
                        3、回收周期顺序:0代回收一定次数(可自定义),触发0代和1代回收;1代回收一定次数,触发0代,1代,2代回收
                        4、查看默认参数及自定义参数 gc gc.get_threshold()  gc.set_threshold(700, 10, 5)

                4、补充:自定义参数设置

                         自定义设置 

import gc
gc.disable()
print("gc.disable 开启状态", gc.isenabled())
gc.enable()
print("gc.enable 开启状态", gc.isenabled())
print("gc获取默认参数:", gc.get_threshold())
gc.set_threshold(1000, 20, 10)
print("gc获取自定义参数:", gc.get_threshold())

                        输出结果

gc.disable 开启状态 False
gc.enable 开启状态 True
gc获取默认参数: (700, 10, 10)
gc获取自定义参数: (1000, 20, 10)

http://www.lryc.cn/news/5488.html

相关文章:

  • Elasticsearch7.8.0版本进阶——数据写流程
  • 化学试剂Glutaric Acid-PEG-Glutaric Acid,GA-PEG-GA,戊二酸-聚乙二醇-戊二酸
  • 知识图谱业务落地技术推荐之国内知识图谱平台汇总(竞品)[阿里、腾讯、华为等】
  • ABC 289 G - Shopping in AtCoder store 数学推导+凸包
  • ARM Linux 如何在sysfs用户态命令行中控制 GPIO 引脚?
  • 【Linux】生产者消费者模型 - 详解
  • 源码深度解析Spring Bean的加载
  • STL——priority_queue
  • Springboot集成工作流Activity
  • 2023软件测试工程师涨薪攻略,3年如何达到月薪30K?
  • Java面试——Spring Bean相关知识
  • 上班在群里摸鱼,逮到一个字节8年测试开发,聊过之后羞愧难当...
  • HTTP、WebSocket和Socket.IO
  • Fluent Python 笔记 第 11 章 接口:从协议到抽象基类
  • 【Spark分布式内存计算框架——Spark Core】11. Spark 内核调度(下)
  • Java中的函数
  • 实验6-霍纳法则及变治技术
  • IP地址:揭晓安欣警官自证清白的黑科技
  • 考研复试机试 | C++
  • 第四章.误差反向传播法—误差反向传播法实现手写数字识别神经网络
  • IB学习者的培养目标有哪些?
  • C++类基础(十三)
  • 03 OpenCV图像运算
  • 【C语言学习笔记】:动态库
  • Zookeeper
  • wav转mp3,wav转换成mp3教程
  • springboot项目配置文件加密
  • 公司招聘:33岁以上的和两年一跳的不要,开出工资我还以为看错了...
  • 【置顶】:文章合集系列
  • Go的web开发Gin框架1(八)——Gin