一个类的实例方法
public void test(){
//dosomethings ...
for(int i=0;i<100;i++){
//dosomethings ...
}
//dosomethings.....
}
这段方法在执行时,变量i的作用域在for循环块中,当出了for循环块以外,变量i失效。但是我想问一下,当出了for循环块以后,变量i的所在内存是否会被回收。也就是说是否在此test方法的栈帧出栈之前被回收?
当调用一个java方法时,产生一个帧,帧里面包括操作数栈、局部变量区和帧数据区
这个局部变量区的大小在编译的时候就已经确定了,在运行时是通过索引来访问的,类似于数组,所以即使出了作用域,这个局部变量区数组还是那么大,不会被compact的,直到方法调用结束将整个帧discard
不会,所有局部变量在方法调用的时候已经分配好,只有方法调用结束后,整个方法的栈帧才会被废弃,这个变量的空间才会被回收
[quote]局部变量的内存是直接在栈中开辟,并使用的。当局部变量脱离作用域,存放该作用域的栈指针,栈顶与栈底重合即为释放内存,速度是非常快的。[/quote]
所以,i的所在内存会在此test方法的栈帧出栈之前被回收
晕,漏了个不。
所以,i的所在内存[b]不[/b]会在此test方法的栈帧出栈之前被回收