1、JVM先加载包含子节码的 class 文件,存放在方法区,实际运行时,虚拟机会执行方法区内的代码。Java虚拟机在内存中划分出栈和堆来存储运行时的数据。
2、运行过程中,每当调用进入 Java方法,都会在 Java方法栈中生成一个栈帧,用来支持虚拟机进行方法的调用与执行,包含了局部变量表、操作数栈、动态链接、方法返回地址等信息。
3、当退出当前执行的方法时,不管正常返回还是异常返回,Java虚拟机均会弹出当前线程的当前栈帧,并将之舍弃。
4、方法的调用,需要通过解析完成符号引用到直接引用;通过分派完成动态找到被调用的方法。
5、从硬件角度来看,Java字节码无法直接执行。因此,Java虚拟机需要将字节码翻译成机器码。翻译过程有两种形式:第一种是解释执行,即将遇到的字节码一边翻译成机器码一边执行;第二种是即时编译(Just-In-Time compilation,JIT),即将一个方法中包含的所有字节码编译成机器码后再执行。在 HotSpot里两者都有,解释执行在启动时节约编译时间执行速度较快;随着时间的推移,编译器逐渐会返回作用,把越来越多的代码编译成本地代码后,可以获取更高的执行效率。
Was this helpful?
0 / 0