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()')
您所发现的称为文件系统缓存。读取文件时,操作系统必须将文件的页面加载到内存中。操作系统可以将加载的页面保留在其文件系统缓存中,希望如果再次需要它们,则不必从内存层次结构的较慢级别加载它们。可以告诉操作系统在读取文件后不要保留文件。正确的应用是防止备份扫描破坏文件系统缓存。
我正在使用 pickle 在内存中加载一个大矩阵。我第一次 运行 脚本加载整个对象大约需要 14 秒。随后的 运行,相反,只需要 4s。看起来对象被加载到内存中并且在执行后没有被释放。这是正常的吗?垃圾收集器不应该在对象未被引用时立即释放该对象吗?
我用不同的文件尝试了不同的时间,结果总是一样的。
这是我用来测试所描述行为的代码:
def load():
with open('batch-0', 'rb') as read:
data = pickle.load(read)
if __name__ == '__main__':
cProfile.run('load()')
您所发现的称为文件系统缓存。读取文件时,操作系统必须将文件的页面加载到内存中。操作系统可以将加载的页面保留在其文件系统缓存中,希望如果再次需要它们,则不必从内存层次结构的较慢级别加载它们。可以告诉操作系统在读取文件后不要保留文件。正确的应用是防止备份扫描破坏文件系统缓存。