1.1 JAVA文件执行过程

计算机识别高级语言的过程:高级语言 -> 汇编语言 -> 机器语言

java文件–前端编译器–>class文件–JVM–>机器指令---->操作系统

java中汇编代码 jvm汇编_java

1.2 JVM的架构模型

java编译器是基于栈的指令集架构,另外一种架构是基于寄存器的指令集架构
HotSpot是一种基于栈的指令集架构。

基于栈和基于寄存器:

基于栈不用分配寄存器,是内存级别的,都是使用的零地址指令。指令流的执行过程依赖于操作栈,更容易实现。而且不需要硬件支持

基于寄存器的需要分配寄存器是硬件级别的,使用的大多是一地址指令二地址指令和三地址指令。这些指令的执行要比栈操作高效,实现难度高,而且依赖硬件。

注:指令一般由两部分构成,一是地址二是数据。有几个地址就是几地址指令。

简单说明基于栈和基于寄存器的区别,并不是实际的jvm流程.

基于栈:
首先数据要入栈成如下
数据栈

1

2

操作栈

两栈依次取就是:

1+2=3

指令如下:

java中汇编代码 jvm汇编_java中汇编代码_02

基于寄存器:

1+2=3

指令如下:
mov eax,1
add eax,2

基于栈跨平台性好,不依赖硬件,指令集小但指令多,指令性能没有寄存器好

1.3 JVM的生命周期

虚拟机的启动

JVM规范中规定:虚拟机由BootstrapClassLoader创建的一个初始类来启动
初始类由各类JVM虚拟机实现

虚拟机的执行

JVM的任务就是执行java程序,程序结束jvm就退出,实际上执行的是一个java虚拟的进程,比如Main方法打印一串数字就是jvm执行的一个Main线程

虚拟机的退出

程序结束会退出
操作系统异常结束虚拟机进程
程序中手动调用Runtime和System的exit方法

1.4 JVM结构

java中汇编代码 jvm汇编_jvm_03

类加载子系统

类加载子系统将Class文件从内存或者网络中取出加载到JVM并初始化,详细过程见 2.1 类加载子系统

运行时数据区

运行是数据区是jvm中最为重要的一部分结构,是jvm整合管理数据的区域,同时也是垃圾回收的作用区域,详细内容见 3.1 运行时数据区

执行引擎

用于翻译class字节码文件为机器指令交给操作系统执行,其中还包括了垃圾回收器用于垃圾回收,详细见 4.1 执行引擎、5.1 GC