JVM(一)

1 字节码指令集

虚拟机的指令由一个字节长度的、代表某种操作含义的操作码以及跟随的多个操作数所组成。但有时也不包含操作数。

 

 

 2 JVM组成部分yinxin

一般由四部分组成,包括类加载器,执行引擎,内存区,本地方法调用。

3 JVM运行过程

Java源文件->(编译)->.class文件->JVM解释器->机器码

通过前端编译器将Java源文件编译为字节码文件。从字节码到机器码有两种选择,一种是使用Java解释器执行字节码,另一种则是使用JIT编译器转化为本地机器代码。

解释器启动速度快,运行速度慢。JIT编译器完成一次编译后,会将机器码保存下拉,下次可以之间使用。将在栈弹出时,编译为机器码。

在Hotspot中,使用c1和c2编译器,可以选择组合而成的混合模式、或者使用c1的解释模式(-Xint)、或者使用c2的编译模式(-Xcomp)。

AOT编译器:在程序执行前生成Java方法的本地代码,以便在程序运行时直接使用本地代码。

图片来源:

https://www.cnblogs.com/chanshuyi/p/jvm_serial_04_from_source_code_to_machine_code.html

 

 

 

4 线程

JVM线程与原生操作系统线程有直接的映射关系。

当栈、程序计数器、本地缓存等准备好以后,就会创建一个操作系统原生线程,Java线程结束,原生线程随之被回收。原生线程初始化完毕,就会调用Java的run()方法,当线程结束时,会释放原生线程和Java线程的所有资源。

Hotspot JVM后台运行的几个系统线程主要包括:

(1)虚拟机线程:等待JVM到达安全点操作的出现。(stop-the-world垃圾回收,线程暂停等)

(2)周期性任务线程:负责定时器事件(中断),用来调度周期性操作的执行。

(3)GC线程:支持JVM中不同的垃圾回收活动。

(4)编译器线程:在运行时将字节码动态编译成本地平台相关的机器码。

(5)信号分发线程:收到JVM的信号并调用适当的JVM方法处理。

 

posted @ 2020-08-17 12:00  182  阅读(73)  评论(0)    收藏  举报