一个类的实例方法
public void test(){
//dosomethings ...
for(int i=0;i<100;i++){
//dosomethings ...
}
//dosomethings.....
}
这段方法在执行时,变量i的作用域在for循环块中,当出了for循环块以外,变量i失效。但是我想问一下,当出了for循环块以后,变量i的所在内存是否会被回收。也就是说是否在此test方法的栈帧出栈之前被回收?
一个类的实例方法
public void test(){
//dosomethings ...
for(int i=0;i<100;i++){
//dosomethings ...
}
//dosomethings.....
}
这段方法在执行时,变量i的作用域在for循环块中,当出了for循环块以外,变量i失效。但是我想问一下,当出了for循环块以后,变量i的所在内存是否会被回收。也就是说是否在此test方法的栈帧出栈之前被回收?
当调用一个java方法时,产生一个帧,帧里面包括操作数栈、局部变量区和帧数据区
这个局部变量区的大小在编译的时候就已经确定了,在运行时是通过索引来访问的,类似于数组,所以即使出了作用域,这个局部变量区数组还是那么大,不会被compact的,直到方法调用结束将整个帧discard