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

循环内外变量声明的内存占用对比:哪种更节省内存?

两段Java循环代码的内存占用对比分析

先把两段代码补全,方便大家理解:
第一段代码:

for(int i=0; i<99999999; i++){ 
    int k=2*i; 
}

第二段代码:

int k=0; 
for(int i=0; i<99999999; i++){ 
    k=2*i; 
}

直接给结论

  • 从纯内存占用角度看,两段代码在JVM未优化前的表现完全一致,不存在第二段优于第一段的情况;
  • 你担心的“第一种写法多占用99999998个额外内存单元”是完全错误的,这是对Java局部变量内存分配机制的误解。

为什么会这样?核心在于Java局部变量的内存分配逻辑

Java中方法内的局部变量是存储在栈帧的局部变量表中的,这个表的大小在编译阶段就已经确定,当方法被调用时,JVM会一次性为所有需要的局部变量分配好内存槽位(slot),不会在代码执行过程中动态创建新的内存单元:

  • 第一段里的k虽然是在循环体内部声明,但它只会占用局部变量表中的1个固定槽位。每次循环执行时,只是把2*i的计算结果覆盖到这个槽位里,循环结束后这个槽位的作用域失效,但不会额外消耗内存。
  • 第二段里的k是在循环外声明的,同样也只占用局部变量表中的1个固定槽位,循环过程中只是重复赋值,没有新增内存开销。

两者唯一的区别是k的作用域范围:第一段的k只能在循环体内访问,第二段的k在整个方法内都能访问,但这和内存占用完全无关。

内容的提问来源于stack exchange,提问作者user8194594

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:54:06