JVM
我们知道 Java bytecode 运行在 JRE (Java Runtime Environment)上. JRE 是 Java Virtual Machine (JVM)重要的一个概念, JRE负责分析和执行Java byte code.
JRE 包括 Java API和 JVM. JVM 通过Class Loader来读取 Java application并且调用Java API执行.
virtual machine (VM)是一台软件实现的计算机,能像物理计算机一样运行程序,java 设计成运行在VM上的语言以此实现 WORA (Write Once Run Anywhere),所以, JVM可以运行在所有的硬件上来执行 Java Bytecode而不需要改变 Java execution code.
JVM的特征有:
- 基于栈的虚拟机:Intel x86 和 ARM 的架构都是基于寄存器的,但是, JVM在栈上运行。
- 符号引用:除了原始数据类型的所有类型(类和接口)都被引用到通过符号引用,而不是通过显式内存地址为基础的参考。
- 垃圾回收GC: 用户代码显式创建的类实例,由GC自动销毁。
- 平台独立: 原始数据类型: 传统的语言像 C/C++ 在不同的平台int类型的有不同的size . JVM保证了不管在什么平台原始数据类型的size都一样.
- 网络字节顺序:java类文件使用网络字节顺序。为了在小端的Intel x86结构和大端的 RISC Series架构之间保持平台的独立性,必须保持一个固定的字节顺序,JVM 使用网络字节顺序, 这是用于网络传输的。网络字节顺序是大端字节序。
Java bytecode
为了实现 WORA, JVM 使用 Java bytecode,这是java和机器语言之间的一种中间语言。
JVM Structure
java源码的运行过程:
class loader 加载编译好的Java Bytecode 去 Runtime Data Areas, execution engine 执行这些 Java Bytecode.
Class Loader
Runtime Data Areas
Runtime Data Areas 是当JVM program 运行的时候系统分配的一个内存区域 , runtime data areas分为 6 个区域。