如果在java中有一条代码是这样的,那么如何进行内存的分配啊,是一直分配,还是只分配固定的一块啊
while(true)
{
int temp=0;
}

解决方案 »

  1.   


    public static void main(java.lang.String[]);
      descriptor: ([Ljava/lang/String;)V
      flags: ACC_PUBLIC, ACC_STATIC
      Code:
        stack=1, locals=2, args_size=1   //栈的深度为1,局部变量表为两个Slot槽
           0: iconst_0                    //把0压栈
           1: istore_1                    //把栈顶的值放到第二个局部变量的位置
           2: goto          0
        LineNumberTable:
          line 6: 0
          line 7: 2
        StackMapTable: number_of_entries = 1
          frame_type = 0 /* same */对于超过变量作用域的变量,对应的局部变量的位置会被其他变量占用,所以不管循环多少次只占用一个局部变量的位置
      

  2.   

    public static void main(String[] args) {
    while(true){
    int temp = 0;
    }

    }这个是对应的java代码
      

  3.   

    Java编译器在这方面还是比较聪明的,它会帮你把没有引用的声明优化掉,所以你这段代码的效果跟下面这段代码一样:while(true){

    }所以你会发现运行你那段代码,程序一直没有结束,也没有发生内存溢出的情况。