【问题标题】:Does CPython's garbage collection do compaction?CPython 的垃圾收集是否进行压缩?
【发布时间】:2016-05-19 22:20:27
【问题描述】:

我在和一位朋友交谈,比较语言,他提到 Java 的自动内存管理优于 Python,因为 Java 的压缩功能,而 Python 没有 - 因此对于长时间运行的服务器,Python 是一个糟糕的选择。

如果没有讨论哪个更好或更坏,他的说法是否正确 - CPython 的垃圾收集器不会压缩内存,因此长时间运行的 Python 进程会随着时间的推移变得越来越碎片化?

我知道运行 CPython 的垃圾收集器是可选的。大多数情况下,它使用自动引用计数来进行自动内存管理,一旦引用计数达到零,对象就会被释放——因此,就释放对象而言,CPython 的垃圾收集器唯一需要做的就是检测没有根集中的对象有一个引用。但我不知道除此之外它是否进行任何压缩。

如果没有,那么长时间运行的 CPython 进程如何解决内存碎片问题?

【问题讨论】:

标签: python memory-management garbage-collection cpython


【解决方案1】:

我不确定,但是 CPython 使用 reference counting 并且它的对象使用内存地址作为 ids 所以我会说它不做压缩......根据this,“[C] Python 不使用内存压缩... [w] Python 是否会使用内存压缩,实现 C 扩展将 更加乏味和容易出错,这样的情况会更少 扩展 - 限制使用 Python 的域。”

【讨论】:

    猜你喜欢
    • 2014-06-02
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 2011-01-26
    • 2021-05-25
    相关资源
    最近更新 更多