功能说明

Python使用引用计数、分代算法回收垃圾,引用计数操作方法:

对象被引用一次,其计数器+1

对象被del,其计数器-1

对象的引用计数为0时候会被回收

python的魔法方法__del__,类似java的finalize方法,会在对象被回收时执行。

实验验证

实验1: 删除仅引用一次的对象

步骤:

创建一个class,重写__del__方法,打印信息

创建该类实例,然后把它del掉,观察是否有回收消息

预期:

对象被回收。

验证代码:

import time

class A:

def __del__(self):

print("A instance deleted")

a = A()

del a

time.sleep(3)

print("sleep end")

print(a)

输出结果:

A instance deleted

sleep end

Traceback (most recent call last):

File "/Users/wuhf/PycharmProjects/cookdata/cookdata/__init__.py", line 16, in

print(a)

NameError: name 'a' is not defined

结果分析:

调完del命令,__del__方法被执行,对象立即被删除(引用次数为0)

调完del命令后引用a被删除(其引用的对象不一定被删除,但是引用一定被删除)

实验2: 删除被多次引用的对象

步骤:

在上面那个用例的基础上,用多个引用引用A的对象

删除其中一个引用,观察对象是否被删除

预期:

删除一个引用,只是那个引用被删除了,但是对象不会被删除。

验证代码:

import time

class A:

def __del__(self):

print("A instance deleted")

a = A()

b=a

c=a

del a

time.sleep(3)

print("sleep end")

print("b=%s" % str(b))

print("c=%s" % str(c))

try:

print("a=%s" % str(a))

except Exception as e:

print(e)

输出结果:

sleep end

b=<__main__.a object at>

c=<__main__.a object at>

name 'a' is not defined

A instance deleted

结果分析:

调完del命令删除a后,对象并没有被删除,通过其他引用b和c可以继续访问

对象在进程结束前被回收了,实际上不调用任何del,进程退出前A的实例都会被回收

推论:如果想回收A的实例,需要删除所有它的引用(引用次数降到0)

以上验证基于Python 3.7.7

python怎么清理电脑进程内存_Python如何释放内存?相关推荐

  1. 当退出python时是否释放全部内存_python如何释放内存

    关于Python中的内存释放问题 首先就不得不提到Python解释器在何种情况下会释放变量的内存.Python引用了内存计数这一简单的计数来控制. python学习网,大量的免费python视频教程, ...

  2. 二维数组的动态内存申请,采用子函数的方式 为二级指针申请内存,和释放内存

    原理:二级指针,行指针+列指针 照着葫芦画瓢就行. 方法一:用c语言malloc实现 #include<cstdio> #include<iostream> #include& ...

  3. Python 自动清理电脑垃圾文件,一键启动即可

    经常存在在我们的电脑中的垃圾文件主要是指系统在运行过程中产生的tmp临时文件.日志文件.临时备份文件等.垃圾清理器的作用其实也是对这些文件进行清理,不会影响到我们使用产生的数据文件.如果是手动删除的话 ...

  4. 做python开发要用多大的内存_Python 在分配内存需要考虑的问题

    由此能看出可变对象在扩充时的秘密:超额分配机制:申请新内存时并不是按需分配的,而是多分配一些,因此当再添加少量元素时,不需要马上去申请新内存 非均匀分配机制:三类对象申请新内存的频率是不同的,而同一类 ...

  5. python太占内存_Python占用的内存优化教程

    概述 如果程序处理的数据比较多.比较复杂,那么在程序运行的时候,会占用大量的内存,当内存占用到达一定的数值,程序就有可能被操作系统终止,特别是在限制程序所使用的内存大小的场景,更容易发生问题.下面我就 ...

  6. python中画糖葫芦的代码_Python中的内存管理

    内存管理 包括: ①变量无须事先声明,变量无须指定类型 ②引用计数 ③垃圾回收 ④内存池机制 ①变量定义 不用事先声明变量类型而直接对变量进行赋值.对Python语言来讲,对象的类型和内存都是在运行时 ...

  7. 【linux 释放内存】linux释放内存骚操作

    Linux释放内存的命令: sync echo 1 > /proc/sys/vm/drop_cachesdrop_caches的值可以是0-3之间的数字,代表不同的含义: 0:不释放(系统默认值 ...

  8. 【巧用自带清空内存命令 一键释放内存资源】

    在日常使用中,如果本本运行时间长变得很慢,我们通常绿色系统收藏都是直接重启系统那就可以恢复速度,系统吧告诉你通过重启会恢复速度是因为内存缓存被清空了,其实借助系统自带清空内存命令,无需重启即可一键释放 ...

  9. python读取进程内存_Python读取Linux内存进程错误(/ proc / $pid / mem...

    我已经在某些Linux发行版(Debian,Linux Mint -)上测试了以下代码,并且可以正常工作,但是在CentOS下,即使我以root身份运行,也会出现错误: #!/usr/bin/env ...

最新文章

  1. linux安装8168网卡,Fedora 配置 RTL8168/8111 网卡 Linux下 RTL8168/8111 网卡配置
  2. Android图形---OpenGL(二)
  3. msql 数据去重,仅保留一条
  4. Kdevelop的安装-2种方法
  5. MATLAB 中怎么求图像在水平方向和垂直方向的像素和,用图表示
  6. [转]网上收集的Html颜色代码全集
  7. java boolean例子_Java Field setBoolean()用法及代码示例
  8. socket通信和异常处理札记
  9. php 获取delete蚕丝_php结合Redis实现100万用户投票项目,并实时查看到投票情况的案例...
  10. LeetCode 6. Z 字形变换(找规律)
  11. 命名空间中不存在名称_原木定制中不开裂的木材真的存在吗?
  12. 玩转SpringSession,重要知识点全面剖析(续篇)
  13. 结构体structure
  14. 宝塔系统linux xss,宝塔漏洞 XSS窃取宝塔面板管理员漏洞高危
  15. ITIL 4 Foundation 思维导图笔记整理
  16. [优雅代码]-调用java集合Map.computeIfAbsent()方法
  17. 2022年上海医院三基考试仿真试题(含答案)
  18. 一文读懂RAM、ROM、SRAM、DRAM、SDRAM等内存概念
  19. Android下音频的测试程序tinyalsa(录音,放音,查看声卡信息)
  20. 解决MacOS12.6自带的屏幕录制闪退的问题

热门文章

  1. 【玩点不一样】你用别人CDN资源多了,有没有想过自己也搭建一个CDN玩玩?
  2. 阿里巴巴复杂搜索系统的可靠性优化之路
  3. 计算机二级小蒋是一位中学老师,计算机二级考试MSOffice考试题库excle有答案
  4. 解决办法:error: failed to push some refs to 'https://github.com/xxxx.git'
  5. Java笔记(二)(寒假)
  6. 微电子新手入门之Cadence常用仿真——NMOS管的漏端输出电阻
  7. 高质量C++/C编程指南(重要)
  8. ICV:车载激光雷达市场将在三年内迎来百亿美元的蓝海市场
  9. 太阳同步轨道卫星 理解内容
  10. 初探 “快应用” 开发