1.1 JAVA文件执行过程
计算机识别高级语言的过程:高级语言 -> 汇编语言 -> 机器语言
java文件–前端编译器–>class文件–JVM–>机器指令---->操作系统
1.2 JVM的架构模型
java编译器是基于栈的指令集架构,另外一种架构是基于寄存器的指令集架构。
HotSpot是一种基于栈的指令集架构。
基于栈和基于寄存器:
基于栈不用分配寄存器,是内存级别的,都是使用的零地址指令。指令流的执行过程依赖于操作栈,更容易实现。而且不需要硬件支持
基于寄存器的需要分配寄存器是硬件级别的,使用的大多是一地址指令二地址指令和三地址指令。这些指令的执行要比栈操作高效,实现难度高,而且依赖硬件。
注:指令一般由两部分构成,一是地址二是数据。有几个地址就是几地址指令。
简单说明基于栈和基于寄存器的区别,并不是实际的jvm流程.
基于栈:
首先数据要入栈成如下
数据栈
1 |
2 |
操作栈
两栈依次取就是:
1+2=3
指令如下:
基于寄存器:
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结构
类加载子系统
类加载子系统将Class文件从内存或者网络中取出加载到JVM并初始化,详细过程见 2.1 类加载子系统
运行时数据区
运行是数据区是jvm中最为重要的一部分结构,是jvm整合管理数据的区域,同时也是垃圾回收的作用区域,详细内容见 3.1 运行时数据区
执行引擎
用于翻译class字节码文件为机器指令交给操作系统执行,其中还包括了垃圾回收器用于垃圾回收,详细见 4.1 执行引擎、5.1 GC