首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

如何解决python的内存泄露有关问题

2012-02-19 
怎么解决python的内存泄露问题怎么解决python的内存泄露问题[解决办法]如果使用Python解释器应该不会有内

怎么解决python的内存泄露问题
怎么解决python的内存泄露问题

[解决办法]
如果使用Python解释器应该不会有内存泄露问题的。在c/c++中嵌入Python中假如没有使用Py_DEXREF等函数未递减从Python传回的PyObject*指针时会引起内存泄露。当然这不是Python的问题,而是你的问题。可以用抽象程度高一点的方法来解决这些问题。比如Boost Python.
[解决办法]
研究了一下发现Python中的内存回收机制是计数器,所以就有可能发生内存泄漏

个人认为好的办法是在不使用一个对象时使用:del object 来删除一个对象的引用计数就可以有效防止内存泄漏问题.
[解决办法]
垃圾回收的方法有很多种,这一点也可以参考Java的相关文章,基本原理其实都差不多,但是Java方面的资料会多一点。我记得看《深入Java虚拟机》的时候看过几种垃圾回收方式的介绍(不过都忘了-_-!),标记后清除应该是基于这么一个概念:如果一个对象是有效对象(非垃圾),那么这个对象所引用到的所有对象都是有效对象(非垃圾)。比如,假使一个list不是垃圾,那么这个list里的所有对象都不是垃圾。这样就可以从一个已知的非垃圾的引用集合,递归式的遍历所有可到达的对象,将这些对象作上标记。在遍历结束后,将所有有标记的对象保留,无标记的对象清除。好像当前的Java虚拟机就是使用这种方法,效果不错。Python的不太清楚。
[解决办法]
垃圾回收机制是多种不错,在COM中使用的是引用计数在.NET中就不是计数了.但是在Python中是根据引用计数来判断是否来垃圾回收的.而del object就是删除一个引用计数,所以这是一个比较理想的方式

热点排行