Python的闭包, 有内存泄露的实例吗?
伊谢尔伦
伊谢尔伦 2017-04-18 10:17:55
[Python讨论组]

2017/2/7

描述

在一篇js的文章中看到, 闭包会导致内存泄露( 所以不用滥用 )

联想到python中, 使用 @装饰器 是非常常见的,
那么, 有内存泄露的实例吗 ?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
大家讲道理

以下是我的了解


我们常说的js的闭包导致内存问题,这个真不是js本身的锅,这是IE垃圾回收机制(GC)的bug(好像某个版本前的Firefox也是)。

用 js 的应该都知道,js 语言本身是不包含 DOM 对象的,DOM 对象是由浏览器生成和管理的,而IE浏览器的 DOM 对象 GC 机制用的是单纯的引用计数。
所以,当出现 DOM 的循环引用的时候,IE 的 GC 完全没法回收,内存就泄露了。
闭包只是比较容易产生循环应用,纯js对象的循环引用,是不会内存泄露的。只有在某些浏览器上,当js对象和DOM对象循环引用了,才可能内存泄露。

然后说下python

python 虽然是引用计数为主的GC模式,但是加上了检测 reachable (标记-清除和分代收集)的机制为辅,所以大部分循环引用是没有问题的。也不用担心装饰器造成类似 js 的内存泄露问题。

但是 python 循环引用还有可能触发不可回收的问题的(比如自定义__del__的对象循环引用),不过比较少见,如果想了解请自行搜索。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号