day21(1)---python的内存管理
垃圾回收机制:
不能被程序访问到的数据,就称之为垃圾。
- 引用计数:引用计数是用来记录值的内存地址被记录的次数的
- 每一次对值地址的引用都可以使得该值的引用计数+1
- 每一次对值地址的释放都可以使得该值的引用计数-1
- 当一个值的引用计数为0的时候,该值就会被系统的垃圾回收机制回收

· 循环导入:循环导入会导致某些值的引用计数永远大于1-----导致内存泄漏
# 循环导入 ls1 = [666]
ls2 = [888]
ls1.append(ls2) # [666, [888, [...]]]
ls2.append(ls1) # [888, [666, [...]]] print(ls1)
print(ls2)
示意图:

标记删除:
- 标记的过程:其实就是,遍历所有的GC ROOTS对象(栈区中的所有内容,或者线程都可以作为GC Roots对象),然后将所有的GC Roots对象可以直接或间接的访问到的对象标记为存活状态对象,并且存放到新的内存空间中。
- 删除的过程:其实就是,将遍历堆中所有的对象,将之前的所有内容(标记或未标记)全部清除,此事标记为存活的对象存放在新的内存空间。
分代回收:
- 分代:指的是根据存活时间来为变量划分不同的等级(也就是不同的代)
- 回收:依然是使用引用计数作为回收的依据
'''
新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,如果发现变量依然被引用,
那么该对象的权重(权重本质就是个整数)加一,当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,青春代的gc扫描的频率低于新生代(扫描时间间隔更长),
假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,节省了扫描的总时间,
接下来,青春代中的对象,也会以同样的方式被移动到老年代中。也就是等级(代)越高,被垃圾回收机制扫描的频率越低
'''

分代过程
''' 总结 '''
""" python的内存管理使用垃圾回收机制
本质是使用引用计数
优化方法是 分代回收
解决循环导入问题,是标记清除 """
day21(1)---python的内存管理的更多相关文章
- python学习笔记10(Python的内存管理)
用这张图激励一下自己,身边也就只有一位全栈数据工程师!!! 32. Python的内存管理 1. 对象的内存使用 对于整型和短字符串对象,一般内存中只有一个存储,多次引用.其他的长字符串和其他对象 ...
- python的内存管理机制
先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++,Java等语言一样,他们可以不用事先声明变量 ...
- python的内存管理与垃圾回收机制学习
一.python内存申请: 1.python的内存管理分为六层:最底的两层有OS控制.第三层是调用C的malloc和free等进行内存控制.第四层第五层是python的内存池.最上层使我们接触的直接对 ...
- python的内存管理机制(zz)
本文转载自:http://www.cnblogs.com/CBDoctor/p/3781078.html 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计 ...
- Python的内存管理、命名规则、3个特性讲解
理解变量: 变:现实世界中的状态是会发生改变的 量:衡量/记录现实世界中的状态,让计算机能够像人一样去识别世间万物(例如:一个人的身高.体重等这些信息) 为什么要变量: 程序执行的本质就是一系列状态的 ...
- Python深入06 Python的内存管理
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的 ...
- 【转】python的内存管理机制
http://developer.51cto.com/art/201007/213585.htm 内存管理,对于Python这样的动态语言,是至关重要的一部分,它在很大程度上甚至决定了Python的执 ...
- Python原理 -- 内存管理
语言的内存管理是语言设计的一个重要方面. 它是决定语言性能的重要因素. 无论是 c语言 的手工管理, 还是 Java 的垃圾回收, 都成为语言最重要的特种. 以下以 python 为例, 说明一门动态 ...
- Theano教程:Python的内存管理
在写大型程序时候的一大挑战是如何保证最少的内存使用率.但是在Python中的内存管理是比较简单的.Python显示分配内存,使用引用计数系统管理对象,当指向某一个对象的引用数变为 0 的时候,该对象所 ...
随机推荐
- 环境与工具3:从打字开始 | vim | sublime
作为程序员,最不爽的一件事是被亲戚叫去修电脑. "喂,怎么跟你们讲,我是写代码的,不是修电脑的!什么?代码是什么?!" 小白:为什么程序员就不能修电脑了? 小程:会不会修都有可能, ...
- [ Java面试题 ]并发篇
1.Java内存模型是什么? Java内存模型规定和指引Java程序在不同的内存架构.CPU和操作系统间有确定性地行为.它在多线程的情况下尤其重要.Java内存模型对一个线程所做的变动能被其它线程可见 ...
- JVM(四)垃圾回收的实现算法和执行细节
全文共 1890 个字,读完大约需要 6 分钟. 上一篇我们讲了垃圾标记的一些实现细节和经典算法,而本文将系统的讲解一下垃圾回收的经典算法,和Hotspot虚拟机执行垃圾回收的一些实现细节,比如安全点 ...
- Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
前情回顾: <Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现> <Spring Cloud Alibaba基础教程:支持的几种服务消费方式> ...
- C#基础-九九乘法表和冒泡排序
//乘法表 ; i < ; i++)//行 { ; j < ; j++)//列 { if (j <= i) { Console.Write("{0}*{1}={2}\t&q ...
- Linux学习笔记之Django项目部署(CentOS)----进阶篇
一.引入 当我们开发好了一个Django项目之后是需要部署到服务器上的,这样才能正式使用这个项目.之前用了一个运行.sh文件的方法让项目得以在后台运行,其实随着学习的深入,这种方法其实是有点low的, ...
- pl/sql to_date
to_date 函数:TO_DATE( string1 [, format_mask] [, nls_language] ) 后面两个函数为可选 ,意思将字符串类型转换为时间类型 , 可以自定义时间格 ...
- xdebug配置
[XDebug] ;指定性能分析文件的存放目录 xdebug.profiler_output_dir="D:\phpStudy\tmp\xdebug" xdebug.trace_o ...
- Django验证码【附源码】
一.安装依赖 CentOS 第一步: yum install python-devel 第二步: yum install freetype-devel libjpeg-devel libpng-dev ...
- WLST Hangs Up Because of Java VM ClassLoader Deadlock
APPLIES TO: Oracle WebLogic Server - Version 10.0 to 10.3.6Information in this document applies to a ...