虚拟的计算机,分为系统虚拟机(VMWare),程序虚拟机(Java虚拟机)。
现在使用的虚拟机基本都是hotspot
jvm
Java虚拟机,运行Java字节码,但是随着发展,现在的jvm也可以运行其他的语言编译成的字节码(只要符合jvm规范就行)
特点:
- 一次编译,多次运行
- 自动的内存管理
- 自动的垃圾回收
jvm位置
jvm整体结构
class files:编译过后的字节码文件
类加载子系统:将文件加载到数据区,生成大的class文件
运行时数据区:保存运行时数据的,其中方法区和堆是线程共享的,程序计数器,本地方法栈,虚拟机栈是线程独有的。
执行引擎:将高级语言翻译为机器语言的执行者,以供机器识别
Java架构模型
1.基于栈的指令集架构(jvm使用)
- 不需要硬件支持,支持跨平台
- 设计实践简单
- 使用零地址指令分配,避开了寄存器分配地址的难题。
- 因为使用的是栈,只需对栈顶元素操作,所以不需要地址。并且指令集更小,编译器容易实现。
2.基于寄存器的指令集架构(如PC,安卓)
- 指令集架构完全依赖硬件,可移植性差。
- 花费更少的指令去执行,性能优秀
JVM生命周期
| 过程 | 描述 |
|---|---|
| 虚拟机启动 | 所有的类都继承object,在这一步使用引导类加载器,把这个类加载到虚拟机中 |
| 虚拟机执行 | 执行Java程序 |
| 虚拟机退出 | 程序结束,代码或者系统产生错误或异常,在程序中手动退出 |