- JVM,也就是Java虚拟机
- 所谓虚拟机是指:通过软件模拟的具有完整硬件系统的,运行在一个完全隔离环境中的计算机系统
- JVM是通过软件来模拟Java字节码的指令集,是Java程序的运行环境
Java 程序是怎么执行的?
- 先把 Java 代码编译成字节码,也就是把 .java 类型的文件编译成 .class 类型的文件。这个过程的大致执行流程:Java 源代码 -> 词法分析器 -> 语法分析器 -> 语义分析器 -> 字节码生成器 -> 最终生成字节码,其中任何一个节点执行失败就会造成编译失败;
- 把 class 文件放置到 Java 虚拟机,这个虚拟机通常指的是 Oracle 官方自带的 Hotspot JVM;
- Java 虚拟机使用类加载器(Class Loader)装载 class 文件;
- 类加载完成之后,会进行字节码校验,字节码校验通过之后 JVM 解释器会把字节码翻译成机器码交由操作系统执行。但不是所有代码都是解释执行的,JVM 对此做了优化,比如,以 Hotspot 虚拟机来说,它本身提供了 JIT(Just In Time)也就是我们通常所说的动态编译器,它能够在运行时将热点代码编译为机器码,这个时候字节码就变成了编译执行。
Java 跨平台实现的原理是什么?
Java 执行流程:Java 源代码(.java)-> 编译 -> Java 字节码(.class) ->通过 JVM(Java 虚拟机)运行 Java 程序。每种类型的服务器都会运行一个 JVM,Java 程序只需要生成 JVM 可以执行的代码即可,JVM 底层屏蔽了不同服务器类型之间的差异,从而可以在不同类型的服务器上运行一套 Java 程序。
类库
Java虚拟机必须对一些Java类库提供支持,否则这些类库根本无法实现
- 反射;多线程;安全,如security;弱引用等;异常;
- 虚拟机的启动,加载,链接和初始化;
- 加载和创建类或接口,如ClassLoader;
- 连接和初始化类和接口的类
JVM规范作用
- Java虚拟机规范为不同的硬件平台提供了一种编译Java技术代码的规范
- 该规范使Java软件独立于平台,因为编译是针对作为虚拟机的“一般机器”而做
- 这个“一般机器”可用软件模拟并运行于各种现存的计算机系统,也可用硬件来实现
JVM规范定义的主要内容
字节码指令集(相当于中央处理器cpu),Class文件的格式,数据类型和值
运行时数据区,栈帧,特殊方法
类库,异常;虚拟机的启动,加载,链接和初始化