当前位置: 首页 > 编程日记 > 正文

python基础-垃圾回收机制

垃圾回收

Python中的垃圾回收是以引用计数为主,分代收集为辅。引用计数的缺陷是循环引用的问题。

引用计数

原理:当一个对象的引用被创建或者复制时,对象的引用计数加1;当一个对象的引用被销毁时,对象的引用计数减1,当对象的引用计数减少为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。

优点:引用计数有一个很大的优点,即实时性,任何内存,一旦没有指向它的引用,就会被立即回收,而其他的垃圾收集技术必须在某种特殊条件下才能进行无效内存的回收。

缺点:但是它也有弱点,引用计数机制所带来的维护引用计数的额外操作与Python运行中所进行的内存分配和释放,引用赋值的次数是成正比的,这显然比其它那些垃圾收集技术所带来的额外操作只是与待回收的内存数量有关的效率要低。同时,引用技术还存在另外一个很大的问题-循环引用,因为对象之间相互引用,每个对象的引用都不会为0,所以这些对象所占用的内存始终都不会被释放掉

标记-清除

标记-清除只关注那些可能会产生循环引用的对象,显然,像是PyIntObject、PyStringObject这些不可变对象是不可能产生循环引用的,因为它们内部不可能持有其它对象的引用。Python中的循环引用总是发生在container对象之间,也就是能够在内部持有其它对象的对象,比如list、dict、class等等。这也使得该方法带来的开销只依赖于container对象的的数量

原理:1. 寻找跟对象(root object)的集合作为垃圾检测动作的起点,跟对象也就是一些全局引用和函数栈中的引用,这些引用所指向的对象是不可被删除的;2. 从root object集合出发,沿着root object集合中的每一个引用,如果能够到达某个对象,则说明这个对象是可达的,那么就不会被删除,这个过程就是垃圾检测阶段;3. 当检测阶段结束以后,所有的对象就分成可达和不可达两部分,所有的可达对象都进行保留,其它的不可达对象所占用的内存将会被回收,这就是垃圾回收阶段。(底层采用的是链表将这些集合的对象连接在一起)

缺点:标记和清除的过程效率不高。

分代回收

原理:在Python中,采用分代收集的方法。把对象分为三代,一开始,对象在创建的时候,放在一代中,如果在一次一代的垃圾检查中,改对象存活下来,就会被放到二代中,同理在一次二代的垃圾检查中,该对象存活下来,就会被放到三代中。

使用模块

转载于:https://www.cnblogs.com/benson321/p/9700942.html

相关文章:

awk 6.0 — awk模式之二

awk的语法 awk [options] ‘Pattern {Actions}’ file1,file2… 之前介绍了三种模式:空模式,关系运算模式,BEGIN/END模式 正则模式 模式可以理解成条件,正则模式就是满足正则表达式条件的,就执行相应的动作&#xf…

根据搜索来路 弹出相应广告

根据搜索来路 弹出相应广告 以下是一段php判断搜索引擎的代码 <?PHP $referer $_SERVER[HTTP_REFERER]; if(!$referer ){ if(ereg(http,$referer)){ $referer eXPlode(.,$referer); if(is_array($referer)){ $referer $referer[1]; if($referer google OR $referer b…

redis mysql查询数据类型_linux 常见的标识与Redis数据库详解

xxxxxx:~$ :第一个 xxx 只的是 用户名第二个 xxx 代表的是 HOST主机~ : 当前用户的根&#xff0c; 根的位置在 /home/用户名$ : 代表当前用户是一个普通用户# : 代表当前用户是超级用户查看当前命令所在的位置pwd文件夹/文件的常见命令mkdirlsrmdirrm创建文件夹mkdirmkdir test…

/etc/hosts/中HOSTNAME错误导致lsnrctl启动错误

系统环境&#xff1a;REDHAT LINUX5.4 ORACLE10.2.0.4&#xff0c;是通过虚拟机复制另外一台数据库系统环境后安装ORACLE获得。故障现象&#xff1a;ORACLE安装正常&#xff0c;本地服务正常&#xff0c;本地数据通过IMP可以正常导入&#xff0c;但是LSNRCTL能够启动&#xff…

16_python_面向对象

一、面向对象和面向过程的区别1、面向对象&#xff1a;一切以对象为中心。有相同属性和动作的结合体叫做对优点&#xff1a;易维护、易复用、易扩展&#xff0c;由于面向对象有封装、继承、多态性的特性&#xff0c;可以设计出低耦合的系统&#xff0c;使系统 更加灵活、更加易…

怎么用canvas画秒针_用canvas画一个钟表

body{background: #000000;}#c1{background: #FFFFFF;}span{color: #FFFFFF;}var oCdocument.getElementById("c1");var oGcoC.getContext(2d);setInterval(function(){ //循环计时器每一秒调用一次&#xff0c;相当于每隔一秒画一次表盘oGc.clearRect(0,0,oC.offset…

每日英语:China's Labor Market Tightens

Job cuts in China appear to be on the rise, dimming prospects for a labor market that has been a resilient bright spot amid a slowdown in the worlds second-largest economy. dimming&#xff1a;调光&#xff1b;变暗    resilient&#xff1a; 弹回的&#xf…

大数据-spark-hbase-hive等学习视频资料

不错的大数据spark学习资料&#xff0c;连接过期在评论区评论&#xff0c;再给你分享 https://pan.baidu.com/s/1ts6RNuFpsnc39tL3jetTkg 转载于:https://www.cnblogs.com/xjh713/p/9704251.html

redis学习 -- 简单动态字符串

Redis没有使用C语言字符串的形式&#xff0c;通过’\0’作为结尾&#xff0c;而是使用了简单动态字符串(simple dynamic string)。 当Redis使用的字符串不需要修改字符串的内容的时候&#xff0c;可以使用C语言提供的字符串&#xff0c;当需要修改内容的时候就使用的是简单动态…

【stanford C++】容器III——Vector类

主要介绍如下5个容器类——Vector&#xff0c; Stack&#xff0c;Queue&#xff0c;Map和Set&#xff0c;各个都表示一重要的抽象数据类型。另外&#xff0c;各个类都是一些简单类型的值的集合&#xff0c;所以称它们为容器类。 暂且我们先不需要知道它们是如何实现的&#xff…

linux编译安装mysql 5.1_linux编译安装mysql5.1.x

安装mysql&#xff0c;安装前准备如果mysql用户不存在&#xff0c;那么添加mysql用户groupadd mysqluseradd -g mysql mysqlmysql编译安装make时间特别长wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.70.tar.gztar -zxvf mysql-5.1.70.tar.gzcd mysql-5.1.70…

Windows PowerShell 批量迁移Windows用户信息

这里说一下我在服务器上本地用户帐号、组的迁移 这里用到的迁移工具是 Windows PowerShell 迁移支持虚拟机和实体机器的迁移&#xff0c;虚拟机和虚拟机的迁移 但是不支持不同语种之间的迁移&#xff0c;比如英语向中文迁移 这里我实验的是虚拟机和虚拟机的迁移 系统是Windows…

css中position的几个值

1. staitic:该值符合文档的初始排版&#xff0c;其中设置的与位置有关的值不起作用。2.relative 该值的偏移量&#xff0c;是在文档初始排版的基础上进行排版&#xff0c;并且覆盖顺序是最新输出的在最上面3.absolute该值元素的定位是以网页文档左上角位基准&#xff0c;并且不…

一个较为详细的ETL系统实现方案

转至&#xff1a;http://www.cognoschina.net/club/viewthread.php?tid5627 1 ETL流程及调度设计&#xff08;ETL Schedule&#xff09;(PSP)1. ETL调度的目标快速见效系统要抽取39家分行四个系统的数据进行加工处理&#xff0c;数据从下传文件到ODS库&#xff0c;ODS库到LDM&…

python与anaconda区别_anaconda和python的区别是什么?

anaconda和python的区别是什么&#xff1f;Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。使用python需要下载安装执行python代码的环境。官方的Python包含了核心的模块和库&#xff0c;为了完成其他任务&#xff0c;需要安装其他的模块和库。Anaconda 是Py…

opencv 1 图像载入、显示和输出

三个函数 imread() namedWindow() inshow()1. imread 函数原型&#xff1a; Mat imread(const string& filename, int flags 1 );参数解析&#xff1a; const string& finename 将要载入的图片路径名。 Windows操作系统下面支持如下类型的图片&#xff1a; Window…

英文申请书范例

Dear Sir or Madam, I am applying for the position of Executive Assistant as advertised in the Recruitment Daily last evening. 我来应聘昨天晚上在每日招聘上发布的行政助理一职。 I have over five years of experience within this role during which time I have de…

c++ ofstream使用方法

ofstream是从内存到硬盘&#xff0c;ifstream是从硬盘到内存&#xff0c;流缓冲即是内存空间。 插入器<< : 向流输出数据。 cout << "test!" << endl; 将字符串输出到标准输出流。 析取器>> : 从流中输入数据 cin >> x; 从标准输入流…

JAVA 继承内存模型_Java内存模型

JVM的组成类加载器(classloader)执行引擎(execution engine)运行时数据区域(runtime data area)对于Java程序员来说&#xff0c;在虚拟机自动内存管理机制下&#xff0c;不再需要像C/C程序开发程序员这样为内一个new 操作去写对应的delete/free操作&#xff0c;不容易出现内存泄…

Error: The INF file contains Unicode characters that could not be converted correctly

昨天第一次为自己的windows mobile程序制作CAB安装包&#xff0c;但是在生成过程中&#xff0c;却出现了这样一个问题&#xff1a;编译完成 -- 0 个错误&#xff0c;0 个警告time -> G:\WindowsMobile\time\time\bin\Debug\time.exe------ 正在启动项目“SmartDeviceCab1”的…

嵌入式开发板设置无密码登录

本次配置需要修改的ssh登录的配置文件 vi /etc/ssh/sshd_config允许root用户远程登录 设置PermitRootLogin参数值为yes #LoginGraceTime 2m PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10允许无密码登录 设置PermitEmptyPasswords 参数值修改为ye…

2012/08/27 夜

杂记于2012/08/27 唉&#xff0c;&#xff0c;最近公司在搬家&#xff0c;一直没有时间来看技术方面的资料&#xff0c;丫的上个星期天还接到第二天凌晨3点钟呢。。。唉。。有点受不了啊。。这苦逼的运维工作&#xff0c;&#xff0c;&#xff0c;呵&#xff0c;来说说这其中让…

存储过程和函数 PROCEDURE FUNCTION

SQL语句执行的时候&#xff0c;要首先编译&#xff0c;然后在被执行。在大型数据库系统中&#xff0c;为了提高效率&#xff0c;将为了完成特定功能的SQL语句集进行编译优化后&#xff0c;存储在数据库服务器中&#xff0c;用户通过指定存储过程的名字来调用执行。 具体而言&am…

Android——学习:线性布局权重分配

LinearLayout在Android中被广泛使用&#xff0c;LinearLayout有一个比较重要的属性——android:layout_weight。按照字面理解就是该控件的权重&#xff0c;这个值默认是 零&#xff08;0&#xff09;。 举个例子&#xff1a; 在下图中&#xff0c;整个界面是一个Linearlayout&a…

java bean配置文件_Spring中多配置文件及引用其他bean的方式

Spring多配置文件有什么好处&#xff1f;按照目的、功能去拆分配置文件&#xff0c;可以提高配置文件的可读性与维护性&#xff0c;如将配置事务管理、数据源等少改动的配置与配置bean单独分开。Spring读取配置文件的几种方式&#xff1a;1、使用Spring自身提供的ApplicationCo…

putty 串口登录开发板

安装putty 多个平台均可以安装putty pc端配置 使用串口线连接开发板 ls /dev 查看是否出现类似于ttyUSBx的文件 sudo putty 弹出页面&#xff0c;选择Serial Serial line填写/dev/ttyUSBx Speed填写115200(根据不同开发板&#xff0c;选择不同参数) 依次点击Load&#xff0…

win7下解决Android SDK Manger慢

2019独角兽企业重金招聘Python工程师标准>>> 今天准备做个Android小程序&#xff0c;以前配置的环境太久了&#xff0c;于是想配最新&#xff0c;但是花了大半天的时间遇到各种问题&#xff0c;最终还是配置好了。 1、首先修改C:\Windows\System32\drivers\etc\host…

Linux 工具进阶

参考网址 https://linuxtools-rst.readthedocs.io/zh_CN/latest/advance/index.html 转载于:https://www.cnblogs.com/artesian0526/p/9712258.html

ASP.NET MVC:利用ASP.NET MVC4的IBundleTransform集成LESS

背景 LESS确实不错&#xff0c;只是每次写完LESS都要手工编译一下有点麻烦&#xff08;VS插件一直没有安装好&#xff09;&#xff0c;昨天在官方看到了如何用IBundleTransform集成LESS&#xff0c;今天就记录一下。 参考资料&#xff1a;http://www.asp.net/mvc/tutorials/mvc…

java锁屏_JAVA设置桌面不锁屏设置

//下面是编译命令// javac -encoding utf-8 Main.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;public class Main extends WindowAdapter {JLabel label null;public Main() {JFrame jFrame new JFrame("保持打开就不会锁屏");Container …