Python:执行后不会释放分配的内存

时间:2019-08-11 09:08:26

标签: python memory pickle

我正在使用pickle将大矩阵加载到内存中。第一次运行脚本时,大约需要14秒才能加载整个对象。随后的运行只需要4s。似乎该对象已加载到内存中,执行后未释放。这正常吗?

垃圾收集器不应该立即释放该对象吗?

我用不同的文件尝试了不同的时间,结果始终是相同的。

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

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


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

1 个答案:

答案 0 :(得分:2)

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