如何释放apu核显占用内存Python占用的内存

sohocoder收集全网最新、最全项目(pythontip出品)
python内存释放
Python内存释放
python话说会自己管理内存,实际上,对于占用很大内存的对象,并不会马上释放。举例,a=range(),会发现内存飙升一个多G,del a 或者a=[]都不能将内存降下来。。
del 可以删除多个变量,del a,b,c,d 办法: import gc (garbage collector) del a gc.collect() 马上内存就释放了。
原文链接:http://my.oschina.net/u/867090/blog/143170
阅读: 308 |Python与开源GIS:关闭矢量数据、释放内存与删除数据_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Python与开源GIS:关闭矢量数据、释放内存与删除数据
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢python内存释放的方法谁能教我?_电脑网络问题_土巴兔装修问答
python内存释放的方法谁能教我?
报价结果将发送到您的手机
您的装修预算约
深圳装修顾问-馨馨
微信扫一扫
(四年装修行业经验)
*装修管家将回电您,免费提供装修咨询服务
*因材料品牌及工程量不同,具体报价以量房实测为准
深圳装修顾问 -馨馨
(四年装修行业经验)
微信扫一扫
python内存释放的方法谁能教我?
提问者:夏绍钧|
时间: 16:23:50
已有3条答案
回答数:48805|被采纳数:4
所有回答:&48805
我觉得可能是因为你的py文件在第一次启动后,已经编译成pyc文件了,再次启动的时候都是加载pyc,省去了编译的阶段,所以速度很快。
你可以试着把程序目录下的所有pyc或者你的代码文件对应的pyc文件删除,看看是不是可以和第一次加载速度相同!
希望我的回答对您有所帮助!
回答数:39141|被采纳数:5
所有回答:&39141
<p class="ask_one_p edit_。大数据量的list,要进行局部元素删除,尽量避免用del随机删除,非常影响性能,如果删除量很大,不如直接新建list,然后用下面的方法释放清空旧list。
2。对于一般性数据量超大的list,快速清空释放内存,可直接用 &&a &&= &&[] &&来释放。其中a为list。
3。对于作为函数参数的list,用上面的方法是不行的,因为函数执行完后,list长度是不变的,但是可以这样在函数中释放一个参数list所占内存: &&del &&a[:],速度很快,也彻底:)
希望我的回答对您有所帮助。
回答数:4463|被采纳数:1
谁人知2006
所有回答:&4463
  这不关缓存的事这是python自己的时 &&在linux下 &&很多程序都是这样的 &&包括java和qt
已有 5 个回答
已有 3 个回答
已有 3 个回答
已有 3 个回答
已有 3 个回答
位业主已在问吧找到答案
一万套装修案例
下载土巴兔APP
中国装修网先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲
(1)垃圾回收
(2)引用计数
(3)内存池机制
一、垃圾回收:
python不像C++,Java等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值。对Python语言来讲,对象的类型和内存都是在运行时确定的。这也是为什么我们称Python语言为动态类型的原因(这里我们把动态类型可以简单的归结为对变量内存地址的分配是在运行时自动判断变量类型并对变量进行赋值)。
二、引用计数:
Python采用了类似Windows内核对象一样的方式来对内存进行管理。每一个对象,都维护这一个对指向该对对象的引用的计数。如图所示(图片来自Python核心编程)
我们首先创建了一个对象3.14, 然后将这个浮点数对象的引用赋值给x,因为x是第一个引用,因此,这个浮点数对象的引用计数为1. 语句y = x创建了一个指向同一个对象的引用别名y,我们发现,并没有为Y创建一个新的对象,而是将Y也指向了x指向的浮点数对象,使其引用计数为2.
我们可以很容易就证明上述的观点:
变量a 和 变量b的id一致(我们可以将id值想象为C中变量的指针).
我们援引另一个网址的图片来说明问题:对于C语言来讲,我们创建一个变量A时就会为为该变量申请一个内存空间,并将变量值&放入该空间中,当将该变量赋给另一变量B时会为B申请一个新的内存空间,并将变量值放入到B的内存空间中,这也是为什么A和B的指针不一致的原因。如图:
&&&&&&&&&&&&&
&int A = 1&&&&&&&&&&&&&&&&&&&&&& int A = 2
而Python的情况却不一样,实际上,Python的处理方式和Javascript有点类似,如图所示,变量更像是附在对象上的标签(和引用的定义类似)。当变量被绑定在一个对象上的时候,该变量的引用计数就是1,(还有另外一些情况也会导致变量引用计数的增加),系统会自动维护这些标签,并定时扫描,当某标签的引用计数变为0的时候,该对就会被回收。
&&&&&&&&&&&&&&&&&&& &&
&&&&& a = 1&&&&&&&&&&&&&&&&&&&&&&&&&a = 2&&&&&&&&&&&&&&&&&&&&&&&& b = a
&三、内存池机制
Python的内存机制以金字塔行,-1,-2层主要有操作系统进行操作,
  第0层是C中的malloc,free等内存分配和释放函数进行操作;
  第1层和第2层是内存池,有Python的接口函数PyMem_Malloc函数实现,当对象小于256K时有该层直接分配内存;
  第3层是最上层,也就是我们对Python对象的直接操作;
在 C 中如果频繁的调用 malloc 与 free 时,是会产生性能问题的.再加上频繁的分配与释放小块的内存会产生内存碎片. Python 在这里主要干的工作有:
  如果请求分配的内存在1~256字节之间就使用自己的内存管理系统,否则直接使用 malloc.
  这里还是会调用 malloc 分配内存,但每次会分配一块大小为256k的大块内存.
  经由内存池登记的内存到最后还是会回收到内存池,并不会调用 C 的 free 释放掉.以便下次使用.对于简单的Python对象,例如数值、字符串,元组(tuple不允许被更改)采用的是复制的方式(深拷贝?),也就是说当将另一个变量B赋值给变量A时,虽然A和B的内存空间仍然相同,但当A的值发生变化时,会重新给A分配空间,A和B的地址变得不再相同
而对于像字典(dict),列表(List)等,改变一个就会引起另一个的改变,也称之为浅拷贝
引用计数增加
1.对象被创建:x=4
2.另外的别人被创建:y=x
3.被作为参数传递给函数:foo(x)
4.作为容器对象的一个元素:a=[1,x,'33']
引用计数减少
1.一个本地引用离开了它的作用域。比如上面的foo(x)函数结束时,x指向的对象引用减1。
2.对象的别名被显式的销毁:del x ;或者del y
3.对象的一个别名被赋值给其他对象:x=789
4.对象从一个窗口对象中移除:myList.remove(x)
5.窗口对象本身被销毁:del myList,或者窗口对象本身离开了作用域。
1、当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉。它会去检查那些引用计数为0的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为0了。
2、垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0)。
[1] Python 2.7.8 documentation memory management
[2]深入详解python传值问题及内存管理机制-CSDN
[3]Python内存池管理与缓冲池设计 - 张知临的专栏
[4]理解python变量和内存管理&
阅读(...) 评论()& Linux系统内存占用90%以上——解决方法
Linux系统内存占用90%以上——解决方法
首先要明确一个问题:Linux系统内存占用90%以上,是否属于正常范围?网上有详细的解释,这属于正常现象~~~
Linux/Unix系统管理内存的方式和windows是不一样的,即便是一个负载很小的linux,跑几天后,内存占用量也将达到90%以上,即便无人访问,这个数字是完全正常的。但是,这个内存占用量不会达到100%的,每天夜里系统都会执行/etc/cron.daily进行内存优化。
Linux/Unix系统是非常稳健的,虽然内存占用显示90%以上,但依然可保证365天以上无须重启。对于Linux系统,评估其压力的主要指标是最近5分钟的负载指数:比如用w命令或者top去看,可以看到“0.70 0.35 0.01”这样的数字,分别表示5分钟内的、10分钟内的、15分钟内排队的进程数,只要第一个数字即5分钟内的负载不大于5,系统就是健康的,不用做任何维护;如果这个数字大于了5,那么通常系统速度就会变慢,一般有如下几种可能:
1) 有程序占用大量CPU,使用top命令来检查(看看是否有java程序锁死之类的故障)
2) 有程序占用大量内存,使得内存真正不够用了(这个才是真正需要加内存的时候),比如由于MySQL在较大负载下运行容量为GB级别的数据库导致内存不够用,需要给服务器插入更多物理内存
3) 磁盘系统读写故障,IO吞吐错误造成CPU负载上升,需要光盘引导进入单用户模式扫描修复磁盘,修不好就只能更换新硬盘了
因此,对于Linux/Unix系统内存占用的百分比,无须过于关心,一般检查系统负载参数即可
但也可以手动进行内存释放,具体操作如下:
[root@ajcheng]# cat /proc/sys/vm/drop_caches
首先,/proc/sys/vm/drop_caches的值,默认为0
[root@ajcheng]# sync
手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
[root@ajcheng]# echo 3 & /proc/sys/vm/drop_caches
[root@ajcheng]# cat /proc/sys/vm/drop_caches
将/proc/sys/vm/drop_caches值设为3
[root@ajcheng]# free -m
total used free shared buffers cached
Mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
Swap: 511 0 511
再来运行free命令,发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB.那么有效的释放了buffer和cache.
Linux/Unix与windows在管理内存的方式上是不一样的。它的管理方式是充分的利用系统的内存,而windows则是无论使用多大的内存都要使用一定的虚拟内存(linux中swap)。
所以说即便是一个刚装上不久的linux系统 ,内存使用量达到90%,也很正常。但是,这个内存占用量不会达到100%的,因为当达到一个占用量的时候,就会启用swap(虚拟内存)。
(关于为何会使用高的解释:
a、linux把剩余的内存都用做磁盘缓存了,这样可以减少硬盘读写次数,Linux在磁盘操作上的速度是要比windows快的。这样做并不会影响系统速度。换句话说就是Linux 是先占用,然后再慢慢使用,windows是要用多少就占用多少。Linux 不会让内存空着的,程序用不了就当缓存用。
b、桌面追求的是反应速度,服务器追求的是吞吐量,两者是有差别的,linux侧重后者。特别体现在任务调度、内存管理。从桌面的角度,尽量要保留一定的空闲内存(如果不够,先将后台进程swap出去),当用户要打开新程序的时候,可以迅速反应。桌面常用的模块预先驻留内存。而linux是著名的lazy的方式。)
Linux/Unix系统是非常稳健的,虽然内存占用显示90%以上,但依然可保证365天以上无须重启。对于Linux系统,评估其压力的主要指标是最近5分钟的负载指数。比如用top去看,可以看到“2.20,2.27,1.81”这样的数字。
分别表示5分钟内的、10分钟内的、15分钟内排队的进程数。只要第一个数字即5分钟内的负载不大于5,系统就是健康的,不用做任何维护
如果这个数字大于了5,那么通常系统速度就会变慢,一般有如下几种可能:
1) 有程序占用大量CPU,使用top命令来检查(看看是否有java程序锁死之类的故障)
2) 有程序占用大量内存,使得内存真正不够用了(这个才是真正需要加内存的时候)
比如由于MySQL(和PHP搭配之最佳组合)在较大负载下运行容量为GB级别的数据库导致内存不够用,需要给服务器插入更多物理内存
3)磁盘系统读写故障,IO吞吐错误造成CPU负载上升,需要光盘引导进入单用户模式扫描修复磁盘,修不好就只能更换新硬盘了
因此,对于Linux/Unix系统内存占用的百分比,无须过于关心,一般检查系统负载参数即可。
linux命令free显示的cached和buffers有什么区别?
这是2个不同的概念来的。cached是cpu与内存间的,buffer是内存与磁盘间的,都是为了解决速度不对等的问题。
total used free shared buffers cached
-/+ buffers/cache:
从上面的信息可以看出。系统实际用了23868M,而buffers用了400,cached用了18485,前面的23868是包含了后面400的buffers和18485的cached,所以系统的物理内存的真实使用量是-buffers/cache=485=4983,为什么这样计算呢,因为buffers和cache其实也是内存的一部分,这部分特殊的内存是可以回收的,甚至如果需要我们还可以将这部分buffers和cache给释放出来,获得这部分的内存。
本文的评论功能被关闭了.}

我要回帖

更多关于 python 释放变量内存 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信