Python--day09(内存管理、垃圾回收机制)
昨天内容回顾
1. 操作文件的三个步骤:
1. 打开文件:硬盘的空间被操作系统持有,文件对象被用用程序持续
2. 操作文件:读写操作
3. 释放文件:释放操作系统对硬盘空间的持有
2. 基础的读写
with open('1.txt', 'r', encoding='utf-8') as rf, open('2.txt', 'w', encoding='utf-8') as wf:
rf.read() # 一次性读完
rf.read(10) # 读取10个字符
rf.readline() # 一次读一行
rf.readlines() # 将所有行读出,存放为一个list
wf.write('写入的内容')
wf.flush() # 主动将内存的数据刷新到硬盘
wf.writelines(['123\n', '456\n'])
3.边读边写:重点
with open('1.txt', 'r', encoding='utf-8') as rf:
with open('2.txt', 'w', encoding='utf-8') as wf:
for line in rf:
wf.write(line)
4. 模式
主模式:r | w | a | x
r: 文件必须有的读,游标默认在开头,游标可以移动
w:文件有清空,无创建的写模式,虽然游标可以移动,但该模式一定会清空文件
a:文件有追加,无创建的写模式,游标永远从末尾开始操作
x:文件无创建写,有报错
从模式:t | b | +
t:默认模式,以字符形式操作
b:以字节形式操作
+:可读可写
5.seek(offset, type)
-- offset: 偏移的字节数
-- type:0 - 游标从头开始 | 1 - 游标从当前开始 | 2 - 游标从末尾开始
-- 游标操作必须在rb模式下
今日主要内容
1. 引用计数:垃圾回收机制的的机制
1. 变量的值被引用,该值的引用计数 +1
2. 变量的值被解绑,该值的引用计数 -1
3. 用计数为0时就会被垃圾回收机制回收
2. 引用计数会出现循环引用问题:相互引用无法释放
1. 连个变量引用其值,值之间又相互引用
2. 变量与值进行解绑,但是值之间还存在相互引用,导致值的引用计数永远是 >0
3. 引用计数>0的值永远无法被引用计数机制回收导致内存泄露
3. 标记清除:解决循环引用问题
所有线程能访问的栈区变量,称为 gc roots对象
1. 所有gc roots对象可以直接或间接访问到的变量值,都会被 标记机制 标记为存活状态
2. 将所有存活状态的值形成新的拷贝,变量完成重新引用
3. 清楚机制 会将之前所产生的值都进行回收
4. 分代回收:采用的还是引用计数来回收,是对该机制的一个优化
1. 杠产生的变量值房子啊新生代中高频率检查,如果引用计数为0,就是采用引用计数机制回收,长期存活变量值经过多次检查后会提高分代
2. 分代越高,检查频率越低,且还能继续提高一直存活的变量值的分代,从而来提高整体垃圾回收机制的效率。
Python--day09(内存管理、垃圾回收机制)的更多相关文章
- [CLR via C#]21. 自动内存管理(垃圾回收机制)
目录 理解垃圾回收平台的基本工作原理 垃圾回收算法 垃圾回收与调试 使用终结操作来释放本地资源 对托管资源使用终结操作 是什么导致Finalize方法被调用 终结操作揭秘 Dispose模式:强制对象 ...
- python内存管理&垃圾回收
python内存管理&垃圾回收 引用计数器 环装双向列表refchain 在python程序中创建的任何对象都会放在refchain连表中 name = '张三' age = 18 hobby ...
- [Python之路] 内存管理&垃圾回收
一.python源码 1.准备源码 下载Python源码:https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz 解压得到文件夹: 我们主要关 ...
- Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC
[转载] :http://my.oschina.net/rouchongzi/blog/171046 Java之类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指 ...
- python之MRO和垃圾回收机制
一.MOR 1.C3算法简介 为了解决原来基于深度优先搜索算法不满足本地优先级,和单调性的问题. python2.3版本之后不管是新式类还是经典类,查找继承顺序都采用C3算法 2.算法原理 C3算法的 ...
- python 全局变量与局部变量 垃圾回收机制
掌握L.E.G.B(作用域) 掌握局部作用域修改全局变量 步骤- 1.命名空间和作用域 命名空间:变量名称与值的映射关系作用域:变量作用的区域,即范围. 注意:class/def/模块会产生作用域:分 ...
- 内存管理 垃圾回收 C语言内存分配 垃圾回收3大算法 引用计数3个缺点
小结: 1.垃圾回收的本质:找到并回收不再被使用的内存空间: 2.标记清除方式和复制收集方式的对比: 3.复制收集方式的局部性优点: https://en.wikipedia.org/wiki/C_( ...
- Python垃圾回收机制--完美讲解!
转自: http://www.jianshu.com/p/1e375fb40506 先来个概述,第二部分的画述才是厉害的. Garbage collection(GC) 现在的高级语言如java,c# ...
- python垃圾回收机制(Garbage collection)
由于面试中遇到了垃圾回收的问题,转载学习和总结这个问题. 在C/C++中采用用户自己管理维护内存的方式.自己管理内存极其自由,可以任意申请内存,但也为大量内存泄露.悬空指针等bug埋下隐患. 因此在现 ...
- 浅谈python垃圾回收机制
引入 解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉,那 ...
随机推荐
- Java面试题:Java中怎么样实现多线程
方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可. 下面是一个例子: public class MyThrea ...
- 【Netty】(6) ---源码ServerBootstrap
[Netty]6 ---源码ServerBootstrap 之前写了两篇与Bootstrap相关的文章,一篇是ServerBootstrap的父类,一篇是客户端Bootstrap类,博客地址: [Ne ...
- java~api返回值的标准化
api返回值的标准化 例如 {"status":200,"message":"操作成功","data":"{\ ...
- parsing:NLP之chart parser句法分析器
已迁移到我新博客,阅读体验更佳parsing:NLP之chart parser句法分析器 完整代码实现放在我的github上:click me 一.任务要求 实现一个基于简单英语语法的chart句法分 ...
- SpringBoot技术栈搭建个人博客【后台开发】
前言:在之前,我们已经完成了项目的基本准备,那么就可以开始后台开发了,突然又想到一个问题,就是准备的时候只是设计了前台的RESTful APIs,但是后台管理我们同样也是需要API的,那么就在这一篇里 ...
- [翻译] GCC 内联汇编 HOWTO
目录 GCC 内联汇编 HOWTO 原文链接与说明 1. 简介 1.1 版权许可 1.2 反馈校正 1.3 致谢 2. 概览 3. GCC 汇编语法 4. 基本内联 5. 扩展汇编 5.1 汇编程序模 ...
- 树莓派linux系统连接windows7系统中的共享文件夹的正确姿势
一.要想使用树莓派linux成功访问win7的共享文件夹而不报错,最重要的事情是要正确设置win7中共享文件的设置. 1.需要共享文件点击右键→属性 2.共享选项卡→网络和共享中心 3.点开公用下拉菜 ...
- C# 构造tree菜单工具方法
如何构造tree数据结构,做个笔记,方便查阅,本方法是直接返回json字符串: private string ToMenuJson(List<Model> data, string par ...
- Java开发相关的linux一些基础命令,必须要掌握的
1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name "*.xml" 递归查找所有的 ...
- 一起学Android之ToggleButton和Switch
本文以一个简单的小例子,简述在Android开发中ToggleButton(开关按钮)和Switch(开关)的简单使用,仅供学习分享使用. 概述 ToggleButton是一个有两种状态(checke ...