【问题标题】:Python: Allocated memory doesn't get released after executionPython:分配的内存在执行后不会被释放
【发布时间】:2019-08-11 09:08:26
【问题描述】:

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

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

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

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


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

【问题讨论】:

  • 您确定这与您的操作系统缓存文件访问无关吗?

标签: python memory pickle


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 2014-04-02
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多