1. java从编码到执行的过程
-
Classloader:将class文件和我们java代码需要的类库装载到内存中,装载完成后,会调用字节码解释器或者用即使编译器来进行编译,然后由执行引擎执行。 复制代码
Java程序最初是仅仅通过解释器解释执行的,即对字节码逐条解释执行,这种方式的执行速度相对会比较慢,尤其当某个方法或代码块运行的特别频繁时,这种方式的执行效率就显得很低。 于是后来在虚拟机中引入了JIT编译器(即时编译器),当虚拟机发现某个方法或代码块运行特别频繁时,就会把这些代码认定为“Hot Spot Code”(热点代码),为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各层次的优化,完成这项任务的正是JIT编译器。 即时编译生成机器相关的中间码,可重复执行缓存效率高。解释执行直接执行字节码,重复执行需要重复解释。
2. JVM
- java和jvm无关,只和class形式的文件有关系,任何语言只要可以编译成class文件,都可以扔在jvm中执行。
- java虚拟机是一种规范
- JDK&JRE&JVM 三者的关系
- JVM:java虚拟机
- JRE:JVM + java运行时环境
- JDK:JRE + 各种开发lib包