【发布时间】:2012-01-10 01:36:05
【问题描述】:
C 等编译后的代码占用的内存很少。
Python等解释代码会消耗更多内存,这是可以理解的。
使用 JIT,程序在运行时(有选择地)编译成机器代码。那么,JIT 程序的内存消耗不应该介于编译程序和解释程序之间吗?
相反,经过 JIT 处理的程序(例如 PyPy)消耗的内存是等效解释程序(例如 Python)的数倍。为什么?
【问题讨论】:
-
每个人都在谈论 JIT 是 Pypy 内存使用量增加的原因,但这并不是故事的全部。虽然 Pypy 的一些内存结构更紧凑(例如所有 int 的列表),但 Pypy 有多种可以与之一起使用的垃圾收集器,它们肯定会影响正在使用的内存量。 Pypy 中当前默认的垃圾收集器出于速度考虑不进行引用计数。因此,对象在内存中的保留时间比在 CPython 中的时间长,因此程序在 Pypy 中的内存占用量更大。
标签: compiler-construction programming-languages jit pypy