我最近对算法感兴趣,并开始通过编写一个简单的实现,然后以各种方式优化它来探索它们.
我已经熟悉用于分析运行时的标准Python模块(对于大多数事情我已经发现IPython中的timeit魔术功能已足够),但我也对内存使用感兴趣,所以我也可以探索这些权衡(例如,缓存先前计算的值表的成本与根据需要重新计算它们的成本.是否有一个模块可以为我分析给定函数的内存使用情况?
我正在和一个朋友聊天,比较语言,他提到 Java 的自动内存管理优于 Python,因为 Java 的压缩,而 Python 则没有——因此对于长时间运行的服务器,Python 是一个糟糕的选择。
没有进入哪个更好或更坏,他的说法是否正确 - CPython 的垃圾收集器是否不会压缩内存,因此,长时间运行的 Python 进程是否会随着时间的推移变得越来越碎片化?
我知道运行 CPython 的垃圾收集器是可选的。大多数情况下,它使用自动引用计数进行自动内存管理,一旦引用计数达到零,对象就会被释放——因此,就释放对象而言,CPython 的垃圾收集器唯一需要做的就是检测没有根集中的对象有一个引用。但我不知道除此之外它是否进行任何压缩的细节。
如果没有,那么长时间运行的 CPython 进程如何解决内存碎片问题?