Python: 分配的内存在执行后没有被释放

Python: Allocated memory doesn't get released after execution

我正在使用 pickle 在内存中加载一个大矩阵。我第一次 运行 脚本加载整个对象大约需要 14 秒。随后的 运行,相反,只需要 4s。看起来对象被加载到内存中并且在执行后没有被释放。这是正常的吗?垃圾收集器不应该在对象未被引用时立即释放该对象吗?

我用不同的文件尝试了不同的时间,结果总是一样的。

这是我用来测试所描述行为的代码:

def load():
    with open('batch-0', 'rb') as read:
        data = pickle.load(read)


if __name__ == '__main__':
    cProfile.run('load()')

您所发现的称为文件系统缓存。读取文件时,操作系统必须将文件的页面加载到内存中。操作系统可以将加载的页面保留在其文件系统缓存中,希望如果再次需要它们,则不必从内存层次结构的较慢级别加载它们。可以告诉操作系统在读取文件后不要保留文件。正确的应用是防止备份扫描破坏文件系统缓存。