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算法的 ...
随机推荐
- [爬坑日记] 安卓模拟器1903蓝屏 没开hyper-v
先说解决方案: 我在升级完1903之后短短几个小时蓝屏了两次 还是不同原因,不由得开始怀疑这个版本的稳定性,随后发现只有启动安卓模拟器的时候必然蓝屏(还有一次蓝屏实在安装驱动的时候) 经过百度得知需要 ...
- class实现React继承以及constructor的super的问题
看这篇文章之前 建议先看看阮一峰 的Class继承 便于更好的理解 首先要知道一个问题 React的父子组件和组件类的继承有什么关系?答案是:没有关系 父子组件:指的得是组件标签包含关系 父子组件通过 ...
- Hibernate第三天-Hibernate主配置信息
今天是学习Hibernate的第三天,主要分析一下Hibernate的配置文件中的信息 Hibernate中的配置文件有两种,第一种是主配置文件hibernate.cfg.xml,第二种是映射配置文件 ...
- 网站复制工具:HTTrack
HTTrack简介: HTTrack是Kali中内置的工具,主要用于克隆网站.渗透测试人员可以利用它来在自主可控制的环境中查看该网站的完整内容:所有离线文件.同时可以利用该网站的副本来开发假冒的钓鱼网 ...
- JavaScript对象,函数,作用域
JavaScript对象 在 JavaScript中,几乎所有的事物都是对象.JavaScript 对象是拥有属性和方法的数据. var car = {type:"Fiat", m ...
- java 倒入一篇文章,显示每个字母的出现概率,从大到小排序
package com_1; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; ...
- 开源分布式系统Druid简谈
介绍 Druid是一个拥有大数据实时查询和分析的高容错.高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分析.尤其是当发生代码部署.机器故障以及其他产品系统遇到宕机等情况时,Dru ...
- 1、json背景
教程链接 链接:http://pan.baidu.com/s/1mil4M1M 密码:vwsn JSON (JavaScript对象表示法)是一种轻量级的基于文本的开放标准,被设计用于可读的数据交换, ...
- IIS反向代理配置教程(最终完整版本)
IIS代理配置教程 插件下载:https://download.csdn.net/download/song_yan_/11996489 一.安装反向代理插件 1.rewrite插件安装 (1) 双击 ...
- 【PAT甲级】1078 Hashing (25 分)(哈希表二次探测法)
题意: 输入两个正整数M和N(M<=10000,N<=M)表示哈希表的最大长度和插入的元素个数.如果M不是一个素数,把它变成大于M的最小素数,接着输入N个元素,输出它们在哈希表中的位置(从 ...