计数回收机制

目录

引入计数机制sys

GC模块

Python零代链表

命令行参数-sys模块


垃圾回收机制的是主要使用计数机制为主,标记-清除和分代手机两种机制为辅的策略。python每个东西都是一个对象,他们核心是结构体:PyObject。PyObject是每个的对象必有得内容,ob recent就是做引用的计数,当一贯对象有了新的引用的上,它就增加,如果引用对象减少,它ob recent就会减少。当引用的计数为零的时候,该对象就不能使用。

引入计数机制sys


优点:简单;实时性,一旦没有引用,内存就会释放,不像其他的机制要等到特定的时机,实时性吧处理的回收的内存的时间分摊。缺点:维护引用计数会消耗资源;循环引用,如果没其他的对象对他们的引用,他们的计数也是1,这导致内存占用。针对这样的情况,引入标记清除和分代收集。
标记-清除先是标记对于对象检测,即检测垃圾,再对象清除。一般在检测对象,如果检测到有效的对象,先对它进行标记。剩下没有被标记的对象,它们是需要清除的。
 

GC模块


它主要的任务:为新生产的兑现分配内存;识别那些垃圾对象;从垃圾对象回收内存。垃圾对象运用程序心脏,它类似心脏那样提供血液,如果心脏停止运行,人就出现死亡。
引用计数不能回收情况:1. 循环数据引用本身,这个循环数据结构引用的计数值不能为零;2. 两个节点引用都被初始化为1,例如Python双端链表:它是指两个数据设立为s1和s2,它们开始的计数是0。当它们附加上next和prev,再把这两个数据相互指向,构成的双端链表。它们引用对方,计数不是0而是1,导致程序再不能处理相互指向自己的对象。

Python零代链表


Python零代链表:python的GC算法用来追踪活跃的数据,内部的C代码代码这其成为零代,每当创建的兑现或其他值时候,它都会加入零代链表。那些不活跃的数据将被回收,而活跃的数据不被释放。

导致引用计数+1情况:对象被创建;对象被引用;对象被作为参数传入到函数中;对象作为元素存在容器。计数-1情况:兑现别名被显示销毁;对象别名被赋予新的对象;兑现离开它的作用域,例如a函数执行完之后,b函数局部变量会-1;对象容器被销毁,或容器删除对象。
触发垃圾回收:当GC模块计数器达到阈值的时候,自动回收垃圾;调用gc.collet(),手动回收垃圾;程序退出的时候,python解释器回收垃圾。
Gc模块自动回收垃圾触发机制:gc对象分为三代,第一代垃圾对象是创建对象之后经过垃圾检查活下来的,放到二代中;第二代同理一代对象没有被回收而活下的,放到三代中。例如(700,2,1)其中700是指上一次垃圾检查,它内存分配的数目;2是距离上一次二代垃圾检查次数,1同理指三代垃圾检查的次数。需要注意的时候,它还有另外一个自动回收的处罚机制:gc有自动垃圾回收的阀值。gc.get_threshold()函数到了获取3的元组,但其中一个元组数到达700之后,它就在存放在下一代中,而这代就会重置。
内存优化:使用小整数对象池,它主要是为了避免整数频繁申请,这些证书对象是提前建立好的,不好被垃圾回收。
大整数池和小整数池区别是:他们都是提前建立好的,不需要再创建了。小数据池的范围是(-5,250),其他都是大数据池子。
PEP8说明:代码读取的次数比写入的次数多得多,这里需要提供的准则是提高代码的可读性,并在各类代码保持一致。代码布局:缩进:每4空格缩进(不一定4个空格),不要Tab,不要混合使用Tab和空格。

命令行参数-sys模块

作用:它可以用传递参数。argv放回命令行参数是一个列表,第一个元素就是py文件名,需要获取参数不需要获取文件名,使用sys.agrv中的切片。它只提供简单的命令行参数,没有给出命令提示,无法做到linux命令一样提供help帮助。
命令行参数argparse模块:这个模块提供用户优化的命令行界面,它需要参数,它可以找出sys参数。它可以自动生产帮助和用法消息,在用户给出程序无效参数的时候发出错误。它这个模块参数设计到的参数有:prog:文件名,默认为sys.argy[0],用help信息描述程序名称;usage:描述程序用途字符串;description:help信息之后显示信息;epilog:help信息之后显示信息。

  1. Parents:他类似于继承的它,它由对象组成的列表中argument。
  2. formatter class:help信息输出格式。
  3. Prefix:参数提前,默认为‘-’。
  4. frenfileprefixchars:前缀字符,放到文件名之前。
  5. add help:是否增加-h/help,一般help信息都是必须的。
  6. argument_default:设置全局选项。
  7. argparse模块添加参数add_argument,它由name和flags参数两种:可选参数和位置参数。一般可选参数需要使用‘-’区分位置参数;action参数默认为store,store_const值存放const中,appand可以存放多个参数;˙required:选项是否必选,默认为True;dest:参数名;choice:设置参数值范围,如果choice类型不是字符串,需要指定type。dest用来给parse_args()函数返回的对象优先命令的。


命令行用于脚本开发的运维开发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值