我正在和一位朋友交谈,比较语言,他提到Java的自动内存管理优于Python,因为Java的压缩效果很好,而Python则没有 - 因此对于长期运行的服务器来说,Python是一个糟糕的选择。
没有进入哪个更好或更糟,他的主张是否正确 - CPython的垃圾收集器不是紧凑的内存,因此,长时间运行的Python进程会随着时间的推移变得越来越分散吗?
我知道运行CPython的垃圾收集器是可选的。大多数情况下,它使用自动引用计数进行自动内存管理,一旦引用计数达到零,就会释放对象 - 因此,就释放对象而言,CPython的垃圾收集器所需的唯一东西就是检测没有的循环。根集中的对象具有引用。但我不知道除此之外是否进行任何压缩的细节。
如果没有,那么长期运行的CPython进程如何解决内存碎片问题?
答案 0 :(得分:4)
我不确定,但CPython使用reference counting,其对象使用内存地址ids,所以我会说它不会压缩...而且根据{{3} },“[C] Python不使用内存压缩... [w]应该使用内存压缩,实现C扩展 更加乏味和容易出错,而且会更少 扩展 - 限制使用Python的域。“