python垃圾回收机制

本文深入探讨了Python的垃圾回收机制,包括引用计数和垃圾收集器的作用,详细解释了内存管理如何确保有效释放不再使用的对象,同时介绍了循环检测和弱引用的概念,帮助开发者更好地理解和优化内存使用。
摘要由CSDN通过智能技术生成
import os
import psutil
# 显示当前python程序占用的内存大小
def show_memory_info(hint):
  pid = os.getpid()
  p = psutil.Process(pid)
  info = p.memory_full_info()
  # print(info)
  # RSS(驻留集大小)
  # USS(唯一集大小)是一个进程特有的内存,如果这个过程被终止,它将即刻被释放。
  # PSS,又名“比例设置大小”,表示与其他进程共享的内存大小,它以这种方式进行计算:
  # 总量最终在共享的进程之间平分。也就是说,如果一个进程有10 MB都归自己(USS),
  # 并与另一个进程共享10 MB,那么其PSS将是15 MB。“swap”很简单,就是已经被交换到磁盘的内存量。
  memory = info.uss / 1024. / 1024
  print("{} memory used: {} MB".format(hint, memory))


def func1():
  show_memory_info('initial')
  a = [i for i in range(1000000)]
  show_memory_info('after created')


def func2():
  show_memory_info('initial')
  global a
  a = [i for i in range(1000000)]
  show_memory_info('after created')


def func3():
  show_memory_info('initial')
  a = [i for i in range(1000000)]
  s
Python垃圾回收机制是自动化的,它通过引用计数和循环垃圾收集两种方式来管理内存。 1. 引用计数:Python中的每个对象都有一个引用计数器,用于记录有多少个引用指向该对象。当引用计数为0时,说明该对象不再被使用,可以被回收。当一个对象被赋值给一个新的变量时,引用计数会增加;当变量被删除或者超出作用域时,引用计数会减少。但是引用计数机制无法解决循环引用的问题。 2. 循环垃圾收集:为了解决循环引用的问题,Python还使用了循环垃圾收集机制。它通过标记-清除算法来检测和回收不再使用的对象。具体过程如下: - 首先,从根对象(如全局变量、活动函数栈等)开始,标记所有可以访问到的对象。 - 然后,清除所有未标记的对象,并回收它们所占用的内存空间。 - 最后,对内存空间进行整理,以便后续分配。 Python垃圾回收机制是自动触发的,当满足一定条件时,垃圾回收器会自动执行垃圾回收操作。这些条件包括: - 当内存达到一定阈值时; - 当对象的引用计数为0时; - 当程序调用了`gc.collect()`函数。 需要注意的是,Python垃圾回收机制是相对慢的,因为它需要遍历整个对象图来进行标记和清除操作。因此,在编写Python程序时,应尽量避免产生大量的临时对象和循环引用,以提高程序的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值