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

昆明 做网站 vrwordpress 文章多图

昆明 做网站 vr,wordpress 文章多图,大型网站seo策略,wordpress启用GZIP压缩python内存管理及垃圾回收 1. 引用计数器 1.1 环状双向连表 refchain 在python程序中创建的任何对象都会放在refchain链表中#xff0c;并且可以通过这个对象访问到上一个和下一个对象。 name 张三 age 18 hobby [美女,吃饭]内部会建立一些数据 -打包 C语言叫做结构体-…python内存管理及垃圾回收 1. 引用计数器 1.1 环状双向连表 refchain 在python程序中创建的任何对象都会放在refchain链表中并且可以通过这个对象访问到上一个和下一个对象。 name 张三 age 18 hobby [美女,吃饭]内部会建立一些数据 -打包 C语言叫做结构体- 【上一个对象、下一个对象、类型、引用个数】 name 张三 # 创建一个对象开辟内存空间 new name # new指向指向张三这块内存不会重新分配内存引用计数1内部会建立一些数据 【上一个对象、下一个对象、类型、引用个数、val18】 age 18 # int会添加具体值内部会建立一些数据 【上一个对象、下一个对象、类型、引用个数、items元素、元素个数】 hobby [美女,吃饭] # 列表会添加元素和元素个数 C语言源码 每个对象都有相同的值PyObject 结构体 (4个值)。有多个元素组成的对象PyObject 结构体 (4个值) ob_size 。 #define PyObject_HEAD PyObject ob_base; #define PyObject_VAR_HEAD PyVarObject ob_base;// 宏定义包含 上一个、下一个用于构造双向链表。(放到refchain链表中时会用到) #define _PyObject_HEAD_EXTRA \struct _object *_ob_next; \struct _object *_ob_prev;// 结构体 typedef struct _object {_PyObject_HEAD_EXTRA // 用于构造双向链表Py_ssize_t ob_refcnt; // 引用计数器struct _typeobject *ob_type; // 数据类型 } PyObject;typedef struct {PyObject ob_base; // PyObject对象Py_ssize_t ob_size; /* Number of items in variable part即元素个数 */ } PyVarObject;源码解析包含 2个结构体 PyObject此结构体中包含3个元素。 _PyObject_HEAD_EXTRA用于构造双向链表。ob_refcnt引用计数器。*ob_type数据类型。 PyVarObject次结构体中包含4个元素ob_base中包含3个元素 ob_basePyObject结构体对象即包含PyObject结构体中的三个元素。ob_size内部元素个数。 3个宏定义 PyObject_HEAD代指PyObject结构体。PyVarObject_HEAD代指PyVarObject对象。_PyObject_HEAD_EXTRA代指前后指针用于构造双向队列。 1.2 不同类型封装的结构体 # float类型 data 3.14内部会创建:_ob_next refchain 中的上一个对象_ob_prev refchain 中的下一个对象 ob_refcnt 1 ob_type floatob_fval 3.14C源码 typedef struct {PyObject_HEADdouble ob_fval; } PyFloatObject;1.3 引用计数器 v1 3.14 v2 999 v3 [1,2,3]当python程序运行时会根据数据类型的不同找到其对应的结构体根据结构体中的字段进行创建相关的数据然后将对象添加到refchain双向链表中。 在C源码中有两个关键的结构体PyObject、PyVarObject。 每个对象中有ob_refcnt 就是引用计数器默认值为1当有其他变量引用对象时引用计数器就会发生变化。 引用 a 999 b a # 999 这个对象的引用计数器1为2删除引用 a 999 b a del b # b变量删除b对应的对象的引用计数器 -1 del a # a变量删除a对应的对象的引用计数器 -1 (a、b对应同一个对象) 当一个对象的引用计数器为0时意味着没有人可以使用这个对象了这个对象就是垃圾需要被回收 回收1.对象从refchain链表中移除2.将对象销毁内存归还系统1.5 循环引用 2. 标记清除 目的为了解决引用计数器循环引用的不足。 实现在python的底层 再维护一个链表链表中专门放那些可能存在循环引用的对象 (list/tuple/dict/set)。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V9eqdYfm-1605967623655)(E:\07-notes\picture\57_解决循环引用图.png)] 在python内部 某种情况下 触发会去扫描 可能存在循环引用的链表中的每一个元素检查是否有循环引用如果有则双方的引用计数器 -1如果是 0 则垃圾回收。 问题 什么时候扫描可能存在循环引用的链表扫描代价较大每次扫描耗时久。 3. 分代回收 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K55asNPj-1605967623657)(E:\07-notes\picture\58_分待回收图 .png)] 将可能存在循环引用的对象维护成 3个链表 0代0代中对象个数达到700个扫描一次1代0代扫描 10 次则 1代扫描一次2代1代扫描10次则 2 代扫描一次。 4. 小结 在python中维护了一个refchain的双向环状链表这个链表中存储程序中创建的所有对象每种类型的对象都有一个 ob_refcnt 的引用计数器的值对象被引用则计数器的值 1引用被删除则计数器的值 -1最后引用计数的值为 0 时会进行垃圾回收对象销毁、从refchain中移除 但是在python中对于那些可以有多个元素组成的对象可能会存在循环引用问题为了解决这个问题python引入了 标记清除 在其内部再维护了一个链表专门放那些可能存在循环引用的对象 (list/tuple/dict/set) 某种情况下 触发会去扫描 可能存在循环引用的链表中的每一个元素检查是否有循环引用如果有则双方的引用计数器 -1如果是 0 则垃圾回收 然而又有一个新的问题产生就是什么时候扫描可能存在循环引用的链表扫描代价较大每次扫描耗时久所以又引入了 分代回收 将可能存在循环引用对象维护成 3 个链表分别是 0代1代2代所有可能存在循环引用的对象都存储在 0代链表当对象个数达到700个的时候扫描一次是垃圾则回收不是则移代 1代依次类推0代扫描10次1代扫描一次1代扫描10次2代扫描1次。 e5分代回收 将可能存在循环引用对象维护成 3 个链表分别是 0代1代2代所有可能存在循环引用的对象都存储在 0代链表当对象个数达到700个的时候扫描一次是垃圾则回收不是则移代 1代依次类推0代扫描10次1代扫描一次1代扫描10次2代扫描1次。
http://www.huolong8.cn/news/344166/

相关文章:

  • 网站建设企业咨询网站建设流程策划
  • 网站域名备案注册证书查询win10建设网站目录
  • 江苏高端品牌网站建设Wordpress管理媒体库
  • 免费生成网站软件下载网站设计中主题有哪些作用
  • 桂林网站自己做优惠劵网站
  • 华为云服务器怎么建设网站DW怎么做电商网站
  • 沈阳海外模板建站网站建设费属于哪个税种
  • 网站推广优化是什么意思php网站后台登陆地址
  • seo建站的步骤织梦网站定时
  • 网站开发与设计多少钱一个网站wordpress网站二次开发
  • 网站开发的基本原则重庆做网站公司哪家比较好
  • 梅州建站网络科技有限公司成都建工网站
  • 临沂河东网站建设免费手机网站商城
  • 一级a做爰片免费网站php网站运行很慢
  • 网站自助授权系统网站建设中 模板
  • 免费 网站 如何做服务周到的上海网站建设
  • 长白山网站学做管理制作网站哪家专业
  • 如何创建一个和淘宝一样的网站怎样才能做一个优质的外贸网站
  • 天门网站设计高端网站建设个人
  • 怎么知道公司网站是哪家做的网站建设代码结构
  • 揭阳网站建设工作做非洲外贸的网站
  • APP网站开发联系电话电子工程网名又知道你是做工程
  • 做黄金期货的网站萍乡网页设计
  • 上海企业模板建站c 微网站开发
  • 网页技术与网站开发分析报告国家建设执业注册中心网站
  • 网站建设专家cms华为云云速建站
  • 网站制作和网页制作区别金点子创业项目
  • 龙口有没有做网站的推广软件是什么
  • 来个网站吧好人一生平安2022下载百度语音导航地图安装
  • 哪个网站容易做二级域名移动物联网流量卡