You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Numba JIT函数后内存占用15MB,此理解是否正确?

关于Numba JIT函数调用内存开销的解释

你的理解不完全准确,这15MB内存并非函数调用本身的持续占用,而是Numba首次编译JIT函数时产生的一次性编译开销。

具体说明:

  • 第一次调用被@jit装饰的函数时,Numba会执行完整的编译流程:将Python代码转换为LLVM中间表示、优化生成机器码,这个过程中会创建大量编译相关的临时对象、缓存数据,这些都会占用内存。
  • 你启用了cache=True,编译结果会被持久化到磁盘缓存,但首次编译的内存开销依然存在;后续再次调用foo()时,内存增长会微乎其微,因为直接加载缓存的编译结果,无需重新编译。
  • tracemalloc统计的是从追踪开始到当前的累计内存分配量,这里的15MB是编译阶段的一次性开销,而foo()函数本身没有任何实际逻辑,运行时几乎不占用内存。

验证示例:

如果在代码中多次调用foo(),你会发现只有第一次调用会产生明显的内存增长:

import tracemalloc
from numba import jit

@jit(nopython=True, cache=True)
def foo():
    return

tracemalloc.start()
print(f"malloc before calling jitted function {tracemalloc.get_traced_memory()}")
foo()
print(f"malloc after first call {tracemalloc.get_traced_memory()}")
foo()
print(f"malloc after second call {tracemalloc.get_traced_memory()}")
tracemalloc.stop()

你的原始代码及结果:

原始代码:

import tracemalloc
from numba import jit

@jit(nopython=True, cache=True)
def foo():
    return

tracemalloc.start()
print(f"malloc before calling jitted function {tracemalloc.get_traced_memory()}")
foo()
print(f"malloc after calling jitted function {tracemalloc.get_traced_memory()}")
tracemalloc.stop()

运行结果:

malloc before calling jitted function (0, 0)
malloc after calling jitted function (15085947, 15227418)

内容的提问来源于stack exchange,提问作者Harry van Langen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:52:08