在下面的示例中,我有一些关于内存使用的相关问题.
如果我在翻译中跑,
foo = ['bar' for _ in xrange(10000000)]
Run Code Online (Sandbox Code Playgroud)
我机器上使用的真实内存最多80.9mb.然后,我
del foo
Run Code Online (Sandbox Code Playgroud)
真正的记忆力下降,但仅限于30.4mb.解释器使用4.4mb基线,那么不26mb向OS 释放内存的优势是什么?是因为Python"提前规划",认为你可能会再次使用那么多内存吗?
为什么它会50.5mb特别释放- 基于此发布的金额是多少?
有没有办法强制Python释放所有使用的内存(如果你知道你不会再使用那么多内存)?
注意
这个问题不同于我如何在Python中明确释放内存?
因为这个问题主要处理从基线增加内存使用量,即使在解释器通过垃圾收集(使用gc.collect或不使用)释放对象之后.
我有一个长期运行的 CPython 3.8 进程。过了一会儿,它使用了大量的 RAM。我试过了
import gc
import psutil
from pympler import muppy, summarize
gc.collect()
total_ram = psutil.Process().memory_info().rss
all_objects = muppy.get_objects(include_frames=True)
s = summary.summarize(all_objects)
python_objects_size = sum(row[2] for row in s)
Run Code Online (Sandbox Code Playgroud)
输出:102 MiB Python 对象,824 MiB RSS 内存!
[编辑] 3. 使用 tracemalloc; 它还返回价值约 100MiB 的 Python 对象
[编辑 2]export PYTHONMALLOC=malloc没有解决问题。
有没有办法查询 CPython 内存管理器来找出