美文网首页
python是如何管理内存的?

python是如何管理内存的?

作者: SavingUnhappy | 来源:发表于2019-03-14 14:34 被阅读0次

python 是一门动态类型的面向对象的编程语言,它把所有的对象和数据结构都保存在私有堆空间中。python通过内置的垃圾回收机制来管理内存。

1. 什么样的数据会被回收。

看看简单的赋值语句:


a = 1

b = 1

上面的赋值语句中,1为对象,a和b为引用,使用python内置的id()函数可以查看对象所存在的内存位置。可以发现id(a)id(b)指向的是同一个位置。

也可以通过is来判断a和b所指向的是都为同一个对象。

python的sys可中也提供了getrefcount()来查看一个对象的引用计数。

当对象的引用计数降为0,没有任何地方用到他,他就成为了垃圾回收的目标。

2. 垃圾回收的启动条件

垃圾回收是比较费资源的,而且在垃圾回收的过程中,程序无法运行,所以垃圾回收肯定不能频繁启动,那在什么样的条件下,垃圾回收会启动呢?

当内存中,引用计数为0的对象和引用计数不为0的对象之间的差值达到一定数值的时候,python会启动垃圾回收。

通过gc.get_threshold()来查看垃圾回收的阈值,默认情况,该函数的返回值为(700,10,10),第一个数字700,表示了启动垃圾回收的阈值。后面的两个10,是垃圾回收中的分代回收的参数。下面说说什么是分代回收。

3. 什么是分代回收

在说分代回收之前,讲讲对象的寿命。一个对象存活的越久,说明它在程序中使用次数多,这种对象是比较不容易成为被回收的垃圾的,所以垃圾回收机制对这种数据比较宽容。

python把所有的对象分为了0,1,2三代,每代对象经历过一次垃圾回收之后还存在,将会归入到下一代中。

gc.get_threshold()获取到的(700,10,10)在这里表示,0代对象每次垃圾回收都会扫描,每10次0代对象的扫描配合一次1代对象的扫描,每10次1代对象的扫描配合一次2代对象的扫描。

可以通过gc.set_threshold()来改变这三个值。

更详细的内容可以看深入python内存管理

相关文章

  • 新手上路?八大秘术助你offer无数(Python初学者/码农必

    话不多说,干货: 1、Python是如何进行内存管理的? Python的内存管理主要有三种机制:引用计数机制、垃圾...

  • 深入理解Python内存管理与垃圾回收,再也不怕问了(一)

    面试官:听说你学Python?那你给我讲讲Python如何进行内存管理? 我:???内存管理不太清楚额。。。 面试...

  • Python内存管理

    引用于 https://zhuanlan.zhihu.com/p/113019698 Python是如何管理内存的...

  • python爬虫面试题

    python是如何进行内存管理的? a、对象的引用计数机制 python内部使用引用计数,来保持追踪内存中的对象,...

  • python基础1

    一·Python是如何进行内存管理Python是动态类型的语言,对象与引用分离,在Python中,整数和短小的字符...

  • python学习一

    1 python 如何管理内存 对象引用计数机制,垃圾回收机制,内存池机制 一。对象引用机制 python内部引用...

  • python是如何管理内存的?

    python 是一门动态类型的面向对象的编程语言,它把所有的对象和数据结构都保存在私有堆空间中。python通过内...

  • InterV For Python

    0x01 Python是如何进行内存管理的 引用计数Python使用引用计数来保持追踪内存中的对象,所有对象都有...

  • Python内存管理知识点讲解(广州中软卓越)

    在学习广州中软卓越python培训课程中,我们会遇到一些关于python的问题,比如Python是如何进行内存管理...

  • python如何管理内存

    程序打开与使用都会占用内存,每当机器的内存大小不一样,而都是有限的;编程语言管理内存的效率就显得很重要了。 大白喜...

网友评论

      本文标题:python是如何管理内存的?

      本文链接:https://www.haomeiwen.com/subject/asgqmqtx.html