JAVA---JIT详解1

一、解释型语言与编译型语言简单介绍

1、解释型语言

解释器将待执行的源代码解释成机器语言,然后再去执行,执行所必须的条件是解释器和源代码,相关的语言有python、js等

2、编译型

在程序之前之前,首先将源代码编译成为可执行的二进制文件,再去执行该二进制文件,执行所必须的条件只需要二进制文件即可,相关的语言有C , C++ , GO等

JAVA这种语言既用到了解释语言的特性也用到了编译语言的特性

二、JAVA程序的执行过程

1、javac 将java源码编译成字节码class
2、java运行class字节码文件,
3、jvm会读取每一行字节码,其解释器(Interpreter)会将其解释为机器语言再去执行,
4、对于热点代码,JIT会提前将其编译成机器语言,等下一次调用的时候,会直接调用编译好的机器语言,而不会再去解释执行,省去了解释这一步,所以执行速度会加快

三、JIT简单介绍

JIT,Just In Time ,动态即时编译 。HotSpot中内置了两个即时编译器,分别为Client Compiler 和 Server Compiler , 其简称为C1编译器和C2编译器。目前的HotSpot默认是将解释器和其中一个编译器一起配合使用,这种配合使用的方式称为混合模式(mixed mode), 可以通过java -version 显示当前模式以及使用的是哪款即时编译器

C:\Users\lichf1>java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) Client VM (build 25.144-b01, mixed mode)

C:\Users\lichf1>

可以通过-server -client参数来指定即时编译器

C:\Users\lichf1>java -version -clinet
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) Client VM (build 25.144-b01, mixed mode)

C:\Users\lichf1>java -version -server
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) Server VM (build 25.144-b01, mixed mode)

C:\Users\lichf1>

可以通过 -Xint 参数强制指定只使用解释器,不使用即时编译器

C:\Users\lichf1>java -Xint  -version -server
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) Server VM (build 25.144-b01, interpreted mode)

C:\Users\lichf1>

可以通过 -Xcomp 参数强制指定只使用编译器,不使用解释器

C:\Users\lichf1>java -Xcomp  -version -server
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) Server VM (build 25.144-b01, compiled mode)

C:\Users\lichf1>

在这种模式下,编译器会优先工作,但是一旦编译出现问题,解释器就会介入工作。

猜你喜欢

转载自blog.csdn.net/qq_41768644/article/details/133218631
JIT
今日推荐