python - CPython 的垃圾收集是否进行压缩?

标签 python memory-management garbage-collection cpython

我和一个 friend 聊天,比较语言,他提到 Java 的自动内存管理优于 Python,因为 Java 有压缩,而 Python 没有——因此对于长时间运行的服务器,Python 是一个糟糕的选择。

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

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

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

最佳答案

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

关于python - CPython 的垃圾收集是否进行压缩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35300396/

相关文章:

python - 向后或向前读相同的单词

c - 释放可能未初始化的结构成员

python - 如何测量 python 中对象的内存使用情况?

c# - 将托管回调传递给 DllImport (ed) 函数

python - 访问父对象而不引用它

python - 计算 ElasticSearch 索引中某个字段的实例数

python - Celery:自动发现在应用程序中找不到任务模块

python - 根据变量值查找数据框中的最大值

c - 在c中动态分配动态分配的字符串数组

java - 哪些元素将被收集为垃圾(SCJP Book Q)