Python回收机制
1、小整数对象池
整数在程序中的使用非常广泛,python 为了优化速度,使用了小整数对象池,避免整数频繁申请和销毁和内存空间。
Python 对小整数的定义事【-5, 257】这些整数对象的hi提前建立好的 ,不会被垃圾回收,在一个 Python 的程序中,所有位于这个范围的整数使用的都是同一个对象。
同理,单个字母也是这样的。
但是当定义2个相同的字符串时,应用计数为0,触发垃圾回收。
2、大整数对象池
每一个大整数对象,均创建一个新的对象。

3、intern 机制
a1 = "HelloWorld"
a2 = "HelloWorld"
a3 = "HelloWorld"
a4 = "HelloWorld"
a5 = "HelloWorld"
a6 = "HelloWorld"
a7 = "HelloWorld"
a8 = "HelloWorld"
a9 = "HelloWorld
Python 会不会创建 9 个对象呢?
在内存中会不会开辟 9 个 “HelloWorld”的内存空间呢?
想一下?
如果时这样的话,我们写了 10000 个对象,比如 a1 = ‘HelloWorld’ a10000 = ‘HelloWorld’ ,这样的话已不是开辟了 10000 个‘HelloWorld’ 所占的内存空间了呢?
如果真是这样,内存早就爆了,所以 Python 中这样一个机制 ----- intern 机制,让它占用一个 'HelloWorld' 所占的空间,靠引用计数去维护何时释放。

总结:
1、小整数[-5, 257] 共用对象,常驻内存
2、单个字符公用对象,常驻内存
3、单个单词,不可修改,默认开启 intern 机制,共用对象, 引用计数为0, 则销毁
垃圾回收(二)
1、Garbage collection(GC垃圾回收)
现在高级语言如java ,C#等都采用了垃圾回收机制,而不是 c,c++里用户自己管理维护没存的方式,自己管理内存极其自由,可以任意申请内存,但如同一把双刃剑,为大量的内存泄漏,悬空指针埋下了隐患。遂于一个字符串、列表、类甚至数值都是对象,且定位简单易用的怨言,自然不会让用户自己处理如何回收内存的问题,python 里也同 java 一样采用了垃圾回收机制,不过不一样的时:python 采用的时引用计数计数机制为主,标记-消除和分代收集两种机制的策略
引用计数机制:
python里每一个东西都是对象,他们的核心就是一个结构体: PyProject
typedef struct_object{
int ob_refcnt;
struct_typeobject *ob_type;
} PyProject;
PyProject 是每个对象必有的内容,其中 ob_refcnt就是作为引用计数。当一个随想有新的引用时,他的 ob_refcnt就i会增加,当引用它的对象v欸删除时,它的ob_reflcnt 就会减少;
当引用计数为 0 时,改对象就结束了
引用计数的机制的优点:
1、简单
2、实时性、一旦没有了引用,内存就直接释放了,不用像其他机制等到特定时机,实时性还带来一个好处:处理回收内存的时间分摊到平时
引用计数机制的缺点:
1、维护引用计数消耗资源
2、循环引用
lst1 = []
lst2 = [] lst1.append(lst2)
lst2.append(lst1)
lst1和 lst2 相互引用,如果不存在其他对象对他们的引用,lst1与lst2的引用计数也任然为 1,所占用的内存永远无法回收,这将时致命的。对于如今的强大硬件,缺点1尚可接受,但是循环引用导致内存泄漏,注定Python还将引用如夫人回收机制(标记清楚和分代收集)
GC系统所承担的工作远比“垃圾回收”多得多,实际上,他们负责三个重要任务
1、为新生对象分配内存
2、识别那些是垃圾对象
3、从垃圾对象中回收内存
如果将应用程序比作人的身体,所有你写的优雅的代码、业务逻辑,算法,应该就是大脑,依次类推,垃圾回收机制应该是身体的那个器官呢?
腰子没有了人还能活好像 可是对于java、C# 这样的高级语言 没有GC的话 是不是就不行 当然不行 那腰子机制不成立 白血球 嗯也不行 ok 心脏行不行 当然可以 哈哈 如果垃圾回收器停止或者行动迟缓 那内存会不会爆满 会不会 会还不是不会 那好 像动脉阻塞或者心脏停跳 难道不应该是人工呼吸吗 是吗 还有必要吗 哦闹
Python回收机制的更多相关文章
- Python的垃圾回收机制
Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾.在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的 ...
- python垃圾回收机制的一些理解
概览: 主要通过 引用计数来进行垃圾收集, 就是说,当一个对象没有被其他对象引用的时候,会释放掉内存. 但是会有一些循环引用的对象,通过上面的方法,是没有办法清除掉的.所以,pyt ...
- Python垃圾回收机制
引用计数Python默认的垃圾收集机制是“引用计数”,每个对象维护了一个ob_ref字段.它的优点是机制简单,当新的引用指向该对象时,引用计数 引用计数 Python默认的垃圾收集机制是“引用计数”, ...
- Python垃圾回收机制详解
一.垃圾回收机制 Python中的垃圾回收是以引用计数为主,分代收集为辅.引用计数的缺陷是循环引用的问题. 在Python中,如果一个对象的引用数为0,Python虚拟机就会回收这个对象的内存. #e ...
- Python垃圾回收机制 总结
Python 垃圾回收机制 内存管理 Python中的内存管理机制的层次结构提供了4层,其中最底层则是C运行的malloc和free接口,往上的三层才是由Python实现并且维护的,第一层则是在第0层 ...
- python 垃圾回收机制的思考
一.前言 Python 是一门高级语言,使用起来类似于自然语言,开发的时候自然十分方便快捷,原因是Python在背后为我们默默做了很多事情,其中一件就是垃圾回收,来解决内存管理,内存泄漏的问题. 内存 ...
- 【Python】 垃圾回收机制和gc模块
垃圾回收机制和gc模块 Py的一个大好处,就是灵活的变量声明和动态变量类型.虽然这使得学习py起来非常方便快捷,但是同时也带来了py在性能上的一些不足.其中相关内存比较主要的一点就是py不会对已经销毁 ...
- Python的垃圾回收机制(引用计数+标记清除+分代回收)
一.写在前面: 我们都知道Python一种面向对象的脚本语言,对象是Python中非常重要的一个概念.在Python中数字是对象,字符串是对象,任何事物都是对象,而它们的核心就是一个结构体--PyOb ...
- python之MRO和垃圾回收机制
一.MOR 1.C3算法简介 为了解决原来基于深度优先搜索算法不满足本地优先级,和单调性的问题. python2.3版本之后不管是新式类还是经典类,查找继承顺序都采用C3算法 2.算法原理 C3算法的 ...
随机推荐
- Python C扩展
可以用C写一个module,可提供给Python使用. #include <Python.h>#include <stdio.h>void Print_PyObject(PyO ...
- jquery 获取 父级 iframe 里的控件对象
window.parent.document.getElementsByTagName('iframe')[0].contentWindow.document.getElementById('id')
- 第二次写linux驱动总结
第一次写驱动是在去年,2019年十月份左右.当时是看着韦老师的视频一步步完成的.其中经历了很多error.搭建环境花费了很多精力.时间来到了2020年2月19日星期三,韦老师新视频出来了,我跟着再来了 ...
- Codeforces Round #579 (Div. 3) 题解
比赛链接:https://codeforc.es/contest/1203/ A. Circle of Students 题意:\(T\)组询问,每组询问给出\(n\)个数字,问这\(n\)个数字能否 ...
- Spark原理概述
原文来自我的个人网站:http://www.itrensheng.com/archives/Spark_basic_knowledge 一. Spark出现的背景 在Spark出现之前,大数据计算引擎 ...
- API接收数据反序列化失败问题查找
C# API接收到数据后,反序列化后直接返回null,而不会给出错误提示,所以不好排查错误. 通过在api中直接进行反序列化,能够得到错误明细: 没有报错的时候,request会直接为null,不会报 ...
- opencv python:直线检测 与 圆检测
霍夫直线变换介绍 霍夫圆检测 现实中: example import cv2 as cv import numpy as np # 关于霍夫变换的相关知识可以看看这个博客:https://blog.c ...
- python中的while
while循环 循环就是一个重复的过程,不断的重复.while循环又称条件循环 while 条件: code 1 code 2 code 3 ... ##实现ATM的输入密码重新输入的功能 while ...
- 高次arccos积分
\[\Large\displaystyle \int_0^{1} \frac{\arccos^4 \left(x^2\right)}{\sqrt{1-x^2}}\,\mathrm{d}x\] \(\L ...
- MySQL 5.5.62 安装方法(标准配置版)
1.此安装方法适用于绝大多数MySQL版本,首先在MySQL官网上下载好所需版本. 2.(官网可能不太好找)在我的博客列表中有一篇是MySQL官网下载链接,直达下载界面,方便. 3.下载.(安装版 ...