美文网首页Python
python:内存管理

python:内存管理

作者: 核桃啊 | 来源:发表于2016-05-10 17:06 被阅读257次

虽然很早知道python是利用引用计数来进行内存管理,但是具体的细节并不明白,网上查了查相关资料,整理一下

查询引用计数api

import sys
# getrefcount会增加1次引用,所以得出的值比真实引用值大1
sys.getrefcount(obj)
import gc
# 引用obj的列表,不过实验中打印了 globals()不知道什么鬼
gc.get_referrers(obj)

原理

python会记录对象的引用数量, 当数量变为0时会在适当的时机清除对象。具体由什么时候清除是由阈值决定的,这个阈值是分配对象的数量和取消分配数量的对象的差值。可以如下查看:

import gc
# output:
#       (700, 10, 10)
print gc.get_threshold()

可见默认是(700, 10, 10),第一个数700就是默认阈值,后面两个10是分代策略所用,可以手动回收:

import gc
gc.collect()

分代

python进行垃圾回收会影响性能,分代策略将常时间存在内存中的对象分配一个高优先级,减少扫描它们的次数。比如:所有对象刚创建时都是0级,进行一次垃圾回收时,会扫描所有的0级对象,在进行了10次垃圾回收后,进行一次1级对象扫描,如果0级对象扫描10次没有清除,则该对象变为1级,如果一级对象扫描10次没清除则变为2级,扫描10次1级再扫描1次2级。
如果改成(700,10,15)就是0-1级需要10次扫描,1-2级需要15次扫描

参考

Why Java and Python garbage collection methods are different?

相关文章

  • python内存管理机制

    Python内存管理机制 Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制 ...

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

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

  • python内存释放

    Python内存释放 python话说会自己管理内存,实际上,对于占用很大内存的对象,并不会马上释放。举例,a=r...

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

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

  • 面试日记--python的内存管理

    面试中被问到python的内存管理,只是说是python有自己的内存管理机制,有自己的垃圾回收机制,却不能详细作答...

  • Python基础知识

    一、Python简介 Python 是一种解释型语言,在 Python 中,由于内存管理是由 Python ...

  • python(Class7)

    内存管理之循环引用 在Python3.x中,内存管理问题基本上不会出现,类似与OC中的ARC机制在Python2....

  • Python3学习 - 第二节

    为什么说Python采用的是基于值的内存管理模式? Python采用的是基于值的内存管理方式,如果为不同变量赋相同...

  • iOS ARC

    内存管理 引用计数:Objective-C Python 垃圾收集:C#,Java等 区别 内存管理的基本规则 自...

  • Python内存管理机制

    转载: Python内存管理机制 c/c++中:通过malloc和free进行内存的申请和释放 python/ja...

网友评论

    本文标题:python:内存管理

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