CPython的垃圾回收是否进行压缩?


问题内容

我当时正在和一位朋友聊天,比较语言,他提到Java的自动内存管理优于Python的,因为Java的压缩比较好,而Python的则不是-
因此,对于长时间运行的服务器,Python是一个不佳的选择。

不言而喻,他的说法是正确的-CPython的垃圾回收器是否不会压缩内存,因此长时间运行的Python进程会随着时间的流逝越来越碎片化?

我知道运行CPython的垃圾收集器是可选的。通常,它使用自动引用计数进行自动内存管理,并且一旦引用计数达到零,就释放该对象-
因此,就释放对象而言,CPython的垃圾收集器唯一需要的是检测没有根集中的对象具有引用。但是我不知道除此之外是否进行任何压缩的细节。

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


问题答案:

我不确定,但是CPython使用引用计数,并且它的对象使用内存地址作为id,因此我会说它不执行压缩。因此,“ [C] Python不使用内存压缩..
Python将使用内存压缩,实现C扩展将更加乏味且容易出错,并且此类扩展将更少-限制了使用Python的领域。”