JVM:跨语言的平台
- Java虚拟机不关心运行在其内部的程序是使用何种编程语言写的,只关心“字节码”文件。只要其他编程语言的编译结果满足并包含Java虚拟机的内部指令集、符号表以及其他的辅助信息,就能被虚拟机识别并装载。
特点:
1、一次编译,到处运行(跨平台性)
2、自动内存管理
3、自动垃圾回收功能
JVM的位置
JVM是运行在操作系统之上,与硬件没有直接的交互。
JVM的整体结构
详细图:
▪ 方法区和堆是多线程公用的,虚拟机栈、本地方法栈和程序计数器是线程独有的。
▪ 执行引擎(即操作系统)只能识别机器指令,字节码指令不等于机器指令,要使字节码指令能够执行,就需要借助执行引擎将高级语言翻译为机器语言。
Java代码执行流程
▪ 操作系统CPU执行的是01的机器指令
▪ Java执行的二次编译,第一次编译是源码编译成class文件,第二次JIT编译器编译成操作系统能执行的机器语言
JVM的架构模型
由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。
- 优点:跨平台,指令集小,编译器容易实现
- 缺点:执行性能比寄存器差一些,实现同样的功能需要更多的指令
JVM的生命周期
虚拟机的启动:是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的
虚拟机的执行:程序开始执行的时候,虚拟机开始运行,程序结束时就停止。执行一个Java程序的时候,是在执行一个叫做Java虚拟机的进程。
虚拟机的退出:
- 程序正常执行结束
- 程序在执行过程中遇到了异常或者错误而异常终止
- 由于操作系统出现错误而导致Java虚拟机进程终止
- 调用Runtime类的halt方法或者System类中的exit方法