局部变量表里有什么

Java中方法的局部变量是放在虚拟机栈的局部变量表里面,形参也算一个。
本地变量表,就是局部变量表,只是翻译不同。
栈帧以变量槽为最小单位。

快速认识

代码说明

public static void main(String[] args) {  
   byte[] waste = new byte[6 * 1024 * 1024];  
   int new_var = 0;  
   System.gc();  
}  

反编译得到:

public static void main(java.lang.String[]);  
   flags: ACC_PUBLIC, ACC_STATIC  
   Code:  
     stack=1, locals=3, args_size=1  
        0: ldc           #2                  // int 6291456  
        2: newarray       byte  
        4: astore_1  
        5: iconst_0  
        6: istore_2  
        7: invokestatic  #3                  // Method java/lang/System.gc:()V  
       10: return  

变量槽 Slot

局部变量表的容量以变量槽(Variable Slot)为最小单位,虚拟机中并没有明确指明一个Slot应占用的内存空间大小,只是很有导向性的说到每个Slot都应该能存放一个下面8种类型的其中一个。

  1. boolean
  2. byte
  3. char
  4. short
  5. int
  6. float
  7. reference
  8. returnAddress

不使用的对象,应当手动赋值为null
为了尽可能节省栈空间,局部变量表的Slot可以复用。
方法体中定义的变量,其作用域并不一定覆盖整个方法体,如果当前字节码PC计数器的值已经超出了某个变量的作用域,那这个变量对应的Slot就可以交给其他变量使用。

你可能感兴趣的:(局部变量表里有什么)