首先我们要知道java中的jvm主要有三块内存空间:栈,堆,方法区(当然除了这三个还有别的,这里我们只讨论这三个。)
首先我们来说说方法区:类加载器会将硬盘上的.class字节码文件装载到jvm的时候,会将字节码文件存放到方法区当中,就是说方法区存放的是代码片段。(因为类需要加载,所以方法区当中最先有数据)
栈:当我们的方法被调用的时候,该方法需要的内存空间就会在栈中分配(没有调用的时候就还是老实的呆在方法区当中)。栈这种数据结构的特点是先进的后出,如图:
知道这些之后我们可以来看一道程序:
下面我们来根据上面的理论来分析,首先会在我们的方法区加载,意思就是我们的main(),testone(),testtwo(),testthree()都会先放在我们的方法区。然后main方法会首先自动进入我们的栈,第一个入栈,它会执行一个int x = 10,然后输出main start,接着再调用我们的testone()方法,这时候我们的testone()入栈,主导权就交到了testone()手上,会输出我们testone()中定义的东西,以此类推,当我们栈顶是testthree()时,testthree()没再调用任何方法,会都执行完,执行完之后就会出栈,接着并是我们的testtwo()在我们的栈顶,以此类推。