jvm的解释执行与编译执行

猎人在吃肉      2022-04-16     373

关键词:

1、原理

字节码无法直接交给硬件执行需要虚拟机 翻译 成 机器码 才能执行,“翻译”的策略有两种:解释执行编译执行 ,又称 即时编译(JIT)

  • 解释执行

    • 以解释方式运行字节码,
    • 解释执行的意思是 读一句,执行一句。

    优点是 启动效率快,
    缺点是 整体的执行速度较慢。

  • 编译执行

    • 将字节码编译成机器码
    • 直接执行机器码
    • 运行时编译
    • 编译后,性能有数量级的提升。

    其特点与解释执行相反,启动较慢,执行较快。

在jvm虚拟机中是两者混合出现,既有解释执行也有编译执行。首先是 解释执行,一条条执行所有字节码,如果JVM发现某个方法被频繁的调用会把该方法用编译执行的策略编译好,下次执行的时候直接调用机器码,这种方法被称为 热点方法,由此可见,编译执行 是以方法为单位。

从业务的角度而言,服务端和用户端对代码的执行速度和启动速度的要求是不一样的。
比如,移动端的应用程序,用户希望程序启动速度较快。
服务端的程序,可能对程序的执行速度有更高的要求。

为此,从 java7 开始, HotSpot 采用了分层编译的方式,即引入了两种即使编译器:C1、C2。
  
C1编译器,称为 client 编译器,面向对启动性能有要求的用户端,编译时间段,优化策略简单;

C2,称为Serve 编译器,对峰值性能有要求的服务器端,编译时间长,优化策略复杂。

具体的在编译热点方法的时候,先采用C1编译器,热点中的热点方法会被C2编译器再次编译。

2、JVM相关参数

-Xint : 解释模式,不激活JIT编译器 (即CompileThreshold=0)。

-Xcomp :编译模式, 指定JVM在第一次使用时把所有的字节码编译成本地代码。(即CompileThreshold=1)。
说明:comp:Compile

-Xmixed : 混合模式执行,-Xint-Xcomp两个混合使用,即解释模式 和 编译模式 混合使用。

-Xbatch : 在前台编译方法,直到编译完成方法才能执行。

-XX:CICompilerCount=n : 指定JIT编译器用来编译方法的线程数量。

-XX:CompileThreshold=n : 指定一个方法的调用次数,以使HotSpot和JIT 编译器能编译它。

3、JVM 的三种模式

int模式: 用 -Xint 开启,即 解释模式, 在这种模式下全部采取解释模式运行。

comp模式: 用 -Xcomp开启,这种模式下通知JVM关闭 解释模式 , 采用 编译模式 运行。但往往导致无法得到良好的自动优化。

mixed模式: 用 -Xmixed 开启,即混合运行模式,也是Hotspot的默认模式。

jvm执行引擎篇(解释器与编译器)(代码片段)

解释器与编译器1.编译和执行的过程2.编译器和解释器3.解释器详解4.编译器详解5.执行方式设置1.编译和执行的过程大部分的程序源代码转换成物理机的目标代码或虚拟机能执行的指令集之前,都需要经历如下步骤代码编译由J... 查看详情

jvm解释器与jit编译器如何并存?

[1]JVM解释器  JVM设计的初衷仅仅只是为了满足Java程序实现跨平台特性,因此避免采用静态编译的方式直接生成本地机器指令,从而诞生了实现解释器在运行时采用逐行解释字节码的执行程序。  解释器真正意义上所... 查看详情

jvm--12---执行引擎----解释器jit编译器

...=>JVM字节码Java字节码的执行JVM字节码==>执行解释器(In 查看详情

运行机制和jvm

...ss文件)。当然,这种字节码不是可执行的,必须使用Java解释器来解释执行。负责解释执行字节码文件的是Java虚拟机,即JVM。JVM是可运行Java字节码文件的虚拟计算机。所有平台上的JVM向编译器提供相同的编程接口,而编译器只... 查看详情

day336.执行引擎-jvm(代码片段)

...比图示3、工作过程二、Java代码编译和执行过程绿色对应解释的过程蓝色对应编译的过程javac前端编译器执行过程后端编译,通过JVM执行引擎解释器,解释过程【解释器】,翻译执行编译器,编译过程【JIT编译器】... 查看详情

编译型语言与解释型语言的区别

...xff0c;但可移植性不强。常见的有:c、cpp、Kotlin什么叫解释型语言通过专门的编译器,把源程序逐行执行成特定平台的机器码并立即执行语言。一般不会考虑整体性的编译和链接处理,相当于把编译型语言的解释与运... 查看详情

jvm(代码片段)

...码的过程中,JVM类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这个方式的执行速度会比较慢,而且,有些方法和代码块是经常被调用,所有后面引进了JIT编译器,而JIT属于运行时编译。当JIT编译器完成第一次编... 查看详情

01-jvm与java体系结构

...otSpotVM是目前市面上高性能虚拟机的代表作之一。它采用[解释器]与[即时编译器]并存的架构。解释器:保证响应时间。及时对字节码文件逐行解释执行JIT:保证性能。针对字节码指令中某些反复执行的指令(热点代码)再次编译成... 查看详情

java代码运行机制

...ss文件)。当然,这种字节码不是可执行的,必须使用Java解释器来解释执行。负责解释执行字节码文件的是Java虚拟机,即JVM。JVM是可运行Java字节码文件的虚拟计算机。所有平台上的JVM向编译器提供相同的编程接口,而编译器只... 查看详情

jvm原理与内存模型

编译型语言:一次性地编译成机器码,生成可执行文件。解释型语言:使用专门的解释器对源码逐行解释成特定平台的机器码并立即执行的语言。JVM原理:Java语言既是编译型语言,又是解释型语言:Java源码通过javac命令被编译... 查看详情

jvm之内存与垃圾回收篇执行引擎(代码片段)

执行引擎执行引擎概述执行引擎属于JVM的下层,里面包括解释器、及时编译器、垃圾回收器执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理... 查看详情

java程序与编译

...    生成java字节码文件(.class)     使用解释执行器(java.exe)将字节码文件加载到java虚拟机(jvm)    Java虚拟机执行字节码文件(jvm实现跨平台的功能) 查看详情

java中eclipse,jdk,jvm,jre,编译器的区别?

...,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。JVM是Java平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行时操作不同的内存区域。JVM通过抽象操作系统和CPU结构,提供了一种与... 查看详情

[jvm解析系列][十三]字节码指令小节,从字节码看jvm的栈解释器执行过程。(代码片段)

众所周知,JVM以前一直采用的是解释执行,但是后来在历代的版本更迭中也加入了编译执行。所以总的来说JVM是包含了解释执行和编译执行。这一部分不属于JVM的范畴了,已经属于编译了,大多数都是进行词法分... 查看详情

jvm总括三-字节码字节码指令jit编译执行

...译后的class文件,java跨平台的中间层,JVM通过对字节码的解释执行(执行模式,还有JIT编译执行,下面讲解),屏蔽对操作系统的依赖。一个字节(8位)可以储存256中不同的指令,这样的指令就是字节码,java所有指令有200个左... 查看详情

compileonce,runanywhere

...译后生成屏蔽操作系统和硬件的字节码,再经由JVM编译、解释执行。Java语言对字节码文件提供了三种执行方式:解释执行,逐条代码边翻译边执行编译执行(动态编译),由JIT(存在于JVM中,Javaintime,Java即 查看详情

jvm的理解

...序具体执行的过程:也相当与注:JVM(java虚拟机)包括解释器,不同的JDK虚拟机是相同的,解释器不同。  如上图所示,首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载 查看详情

编译执行vs解释执行

一般编译程序从对源程序执行途径的角度不同,可分为解释执行和编译执行。所谓解释执行是借助于解释程序完成,即按源程序语句运行时的动态结构,直接逐句地边分析边翻译并执行。像自然语言翻译中的口译,随时进行翻译。所... 查看详情