jvm

当我们最开始执行一个方法的时候,步骤如下:
首先将.class文件进行装载,接着加载到内存中,最后由执行引擎去执行。
jvm_第1张图片

运行时数据区:
堆:new出来的对象
栈:虚拟机栈,线程栈。用来存储一些变量。栈是线程私有的,每个线程都有一个栈。栈的结构如下:
当我们启动我们的程序之后,就会给main线程分配栈内存。当我们在main方法中调用另一个方法比如说computer()方法,模型就如下所示。这里的栈帧的作用就是区分同一个线程里不同方法的局部变量的作用域范围。
jvm_第2张图片
我们可以通过查看字节码文件来看清楚执行过程,但是需要使用jvm中的命令进行反编译,得到编译后的文件之后,我们可以使用记事本打开查看。
首先局部变量表是空的,当执行下图中computer的Code的第一行时,即0:1const_1,即是把int型的数值1放入到操作数栈中,第二行是把int数值1从操作数栈放入到局部变量表对应的变量中。方法出口,就是保存你要返回的值,并且要保存返回到main方法的位置,因为在main方法中,调用完该方法后,下面还有要执行的代码,所以要记录返回的位置。
jvm_第3张图片

程序计数器:就是记录当前线程执行到的字节码的行号。
方法区:在1.8之前叫做永久代,在1.8之后叫做元空间。主要存储常量、静态变量、类元信息。类元信息:就是类的组成结构的信息。

你可能感兴趣的:(java)