【问题标题】:Python GC memory compactionPython GC 内存压缩
【发布时间】:2020-03-25 21:00:28
【问题描述】:

据我所知,cpython有 GC,但不支持内存压缩,这意味着 python 长时间运行的进程可能会遭受高内存碎片/消耗。

我已经阅读了一些关于这个主题的主题:

https://lists.gt.net/python/python/1163027#1163027

https://lists.gt.net/python/python/1162114

https://dzone.com/articles/python-memory-issues-tips-and-tricks

如果我正确理解了前两个线程,那么问题就在于 Python 中的 C 内存分配器是如何工作的。

如果 Java 热点也是用 C 编写的,这怎么会是个问题?我错过了什么?

为什么 cpython GC 不支持内存压缩,据我所知还没有引入它的计划?

【问题讨论】:

    标签: python memory garbage-collection cpython


    【解决方案1】:

    问题不在于 CPython 的内存分配器,而在于 CPython 的 C API。 Java 的本机接口(JNI)经过精心设计,可将用户与垃圾收集等虚拟机实现细节隔离开来。相比之下,CPython 的 C API 公开了更多的实现,包括内存布局和引用计数。引用计数被嵌入到曾经编写的每个 C 扩展中。可以在具有不同 GC 设计的 VM 上模拟 CPython API(PyPy 的 cpyext 支持可以做到这一点),但这种模拟并不完美,并且会增加开销。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多