JVM与Java体系结构
-
JVM整体结构(上图主要针对hotspot虚拟机)
- 类加载器:
- 将字节码文件加载进去,并不一定是java字节码文件,很多语言都会编译成字节码文件使用JVM
- 运行时数据区:
- 方法区和堆:使用了同一种颜色,这俩对所有线程共享
- java栈、本地方法区、PC计数器:每个线程独有一份
- 执行引擎:
- 解释器:用于解释运行
- JIT及时编译器:编译器的后端(相较,编译成字节码文件的那个编译器成为编译器的前端),字节码指令翻译成机器指令。
- 垃圾回收器
- 类加载器:
-
Java代码执行流程
-
JVM架构模式:
- Java编译器输入的指令流基本是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构
- 基于栈式架构的特点:跨平台性、指令集小、指令多;执行性能比寄存器差
- 设计简单,适用于资源受限的系统
- 避开了寄存器的分配难题:使用零地址指令
- 指令中大部分是零地址指令,器执行过程依赖于操作栈。指令集更小(8位),编译器容易实现
- 不需要硬件支持,可移植性更好,可跨平台
- 基于寄存器架构的特点: 性能更好,但是和硬件耦合度高,指令集大
- 典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虚拟机。
- 指令集架构则完全依赖硬件,可移植性差
- 性能优秀和执行更高效
- 花费更少的指令完成一项操作(不需要频繁的出入栈)
- 更大的指令集,更多的指令,一般都为一地址或多地址指令
- 基于栈式架构的特点:跨平台性、指令集小、指令多;执行性能比寄存器差
- Java编译器输入的指令流基本是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构
-
JVM生命周期:
- 启动:
- 启动是由引导类加载器(bootstrap class loader)创建的一个初始类完成,类是由虚拟机的具体实现(规范)指定的。
- 执行:
- 执行java程序是他的任务
- 程序开始执行时他才运行,程序结束他就停止
- 执行一个所谓的java程序时,真正执行的是一个叫做java虚拟机的进程
- 退出:
- 正常结束
- 异常终止
- 操作系统错误导致退出
- 某线程调用exit方法
- 启动: