说到java代码的执行,就要先说说 JVM .
JVM是可运行 java 代码的假想计算机 ,包括一套字节码指令集、一组 寄存器 、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。
java和 c++ 在运行方式上的区别?
java需要依赖 JRE 的运行环境,而c++代码则无需额外的运行时。
c++的运行方式已经很成熟了,那么为什么java要在 虚拟机 中运行呢?
JVM是怎样运行java字节码的?
从虚拟机的视角来看,执行java代码首先需要将它编译而成的 class文件 加载到java虚拟机中。加载后的java类会被存放在方法区中。实际运行时,虚拟机会执行方法区的代码。
在运行过程中,每当调用进入一个java方法,java虚拟机会在当前 线程 的java方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。这个栈帧的大小是提前计算好的,而且java虚拟机不要求栈帧在内存空间里连续分布。
在hotspot里面,上述编译过程有两种形式:第一种是解释执行,即逐条将字节码翻译成机器码并执行;第二种是即时编译(JIT),即将一个方法包含的所有字节码编译成机器码后再执行。
前者的优势在于无需等待编译,而后者的优势在于实际运行速度更快。HotSpot默认采用混合模式,综合了解释执行和即时编译两者的优点。他会先解释执行字节码,而后将其中反复执行的热点代码以方法为单位进行即时编译。即时编译是建立在程序符合二八定律的假设上,也就是百分之二十的代码占据了百分之八十的计算资源。