【问题标题】:python2.7 function range() memory leak on ubuntuubuntu上的python2.7函数范围()内存泄漏
【发布时间】:2022-01-11 14:59:33
【问题描述】:

当我使用 range 函数时,它永远占用内存,即使我 del 并运行 gc.collect()

import gc
import time
a = range(int(1e8))
del a
gc.collect()
time.sleep(30)

我使用 htop 进行监控,发现它们永远占用了大量内存。它只发生在 ubuntu16.04 上(macos 不是)。 知道为什么会这样吗?

【问题讨论】:

  • 在 python 2.7 range 创建一个列表(所以当你定义 a 时你分配了很多内存)。使用xrange 进行惰性迭代并避免分配0 到1e8 之间的整数列表。 Python 3 将 range 替换为始终表现得像 xrange。
  • @GPhilo 我已经提到(以及在代码中)我已经删除了变量保持这个范围,所以这意味着我已经删除了这个列表。
  • CPython 在内部释放内存,但不会将其返回给操作系统。

标签: python python-2.7 memory-leaks garbage-collection


【解决方案1】:

感谢@Klaus D. 的回答,我明白了。

Range 创建一个指针列表,每个指针指向一个对象。 Del "a" 将释放该列表并归还内存。它还包含所有 int 对象,但这些小对象不会返回给操作系统,因为 python 自己管理小内存分配。

【讨论】:

    猜你喜欢
    • 2013-05-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2012-09-16
    • 2013-10-09
    相关资源
    最近更新 更多