JVM核心知识点(一):Java代码是怎么运行的

首先一个问题入题:是否知道java和c++在运行方式上的区别?
java需要依赖JRE的运行环境,而c++代码则无需额外的运行时。

那么问题又来了,既然c++的运行方式已经很成熟了,那么为什么java要在虚拟机中运行呢?

  • 为了实现一次编写,到处运行的目标。
  • jvm作为一个很好的托管环境,能够代替我们处理一些代码中冗长而且容易出错的部分,比如垃圾回收。

Java虚拟机具体是怎样运行java字节码的?

从虚拟机的视角来看,执行java代码首先需要将它编译而成的class文件加载到java虚拟机中。加载后的java类会被存放在方法区中。实际运行时,虚拟机会执行方法区的代码。
20200605005538104.png?,size_16,color_FFFFFF,t_70#pic_center

在运行过程中,每当调用进入一个java方法,java虚拟机会在当前线程的java方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。这个栈帧的大小是提前计算好的,而且java虚拟机不要求栈帧在内存空间里连续分布。

在hotspot里面,上述翻译过程有两种形式:第一种是解释执行,即逐条将字节码翻译成机器码并执行;第二种是即时编译(JIT),即将一个方法包含的所有字节码编译成机器码后再执行。
20200605005830818.png?,size_16,color_FFFFFF,t_70#pic_center

前者的优势在于无需等待编译,而后者的优势在于实际运行速度更快。HotSpot默认采用混合模式,综合了解释执行和即时编译两者的优点。他会先解释执行字节码,而后将其中反复执行的热点代码以方法为单位进行即时编译

Java虚拟机的运行效率究竟怎么样?

即时

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章