要理解java代码是怎么执行,这里的重点在于∑ JVM在这当中,充当了什么作用。简单来说就算承上启下。 上是开发语言,下是操作系统。总体流程是, *.java —> *.class —> JVM —> 二进制码 —> 操作系统执行。 简单来说,就算通过自己定义的一套字节码规则,然后在jvm执行代码,而jvm如何执行代码?就算通过转换成操作系统可执行的代码.
从虚拟机角度来说,就算编译器编译成字节码,然后通过类加载子系统 加载到虚拟机中。
加载后的 Java 类会被存放于方法区(Method Area)中。实际运行时,虚拟机会执行方法区内的代码。
不同于实体机,Java 虚拟机会将栈细分为面向 Java 方法的 Java 方法栈,面向本地方法(用 C++ 写的 native 方法)的本地方法栈,以及存放各个线程执行位置的 PC 寄存器
在运行过程中,每当调用进入一个 Java 方法,Java 虚拟机会在当前线程的 Java 方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。这个栈帧的大小是提前计算好的,而且 Java 虚拟机不要求栈帧在内存空间里连续分布
当退出当前执行的方法时,不管是正常返回还是异常返回,Java 虚拟机均会弹出当前线程的当前栈帧,并将之舍弃