我正在与一位朋友交谈,比较语言,他提到 Java 的自动内存管理优于 Python,因为 Java 可以进行压缩,而 Python 则不能 - 因此对于长时间运行的服务器来说,Python 是一个糟糕的选择。
在不讨论哪个更好或更坏的情况下,他的说法是否正确——CPython 的垃圾收集器是否不压缩内存,因此,长时间运行的 Python 进程随着时间的推移会变得越来越碎片化?
我知道运行 CPython 的垃圾收集器是可选的。大多数情况下,它使用自动引用计数来进行自动内存管理,一旦引用计数为零,对象就会被释放 - 因此,就释放对象而言,CPython 的垃圾收集器唯一需要做的就是检测不存在的循环。根集中的对象有一个引用。但我不知道除此之外它是否还进行任何压缩的详细信息。
如果没有,那么长时间运行的 CPython 进程如何解决内存碎片问题?
我不确定,但 CPython 使用引用计数及其对象使用内存地址作为ids所以我想说它不进行压缩......并且根据this,“[C]Python 不使用内存压缩...[w]Python 应该使用内存压缩,实现 C 扩展会
会更加乏味且容易出错,而且这样的情况会更少
扩展 - 限制 Python 的使用范围。”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)