首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MemoryError会导致python刷新它的缓存吗?

MemoryError会导致python刷新它的缓存吗?
EN

Stack Overflow用户
提问于 2017-08-01 05:55:08
回答 1查看 173关注 0票数 0

我刚刚看到一台机器上发生了一次MemoryError,我注意到服务器上的可用缓存在这之后急剧增加。当抛出错误时,Python会以某种方式触发内存管理任务吗?或者这可能是由服务器(Linux / CentOs)管理的?

EN

回答 1

Stack Overflow用户

发布于 2017-08-01 06:08:08

MemoryError没有经过特殊处理,不会导致这种情况发生,也不会出现其他异常,但是:

垃圾收集器异常确实会展开堆栈,当异常处理完成时(在处理期间,异常回溯倾向于创建阻止从BaseException继承的occurring)

  1. MemoryError的循环引用,而不是从Exception继承的循环引用,因此它不太可能由“通用”except Exception:块处理,这意味着更多的堆栈层被展开并最终释放
  2. CPython循环垃圾收集器determines when to run collections based on the number of allocations and deallocations that have occurred;如果大型堆栈展开释放了大量对象,如果足以触发收集

,则可能会释放更多对象

所有这些都增加了释放内存的可能性,但这些都不是特定于MemoryError的;如果您点击Ctrl-C并触发KeyboardInterrupt,则可以观察到相同的行为。更有可能的是,您看到的是Python退出,或者Linux通过转储缓存来响应极端的内存请求;MemoryError会在转储缓存以尝试满足大内存请求之后出现,特别是当请求是以多个连续的内存块请求而不是单个巨大请求发出的时候。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45425892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档