什么是 JVM
JVM 是 Java 二进制字节码(.class)的运行环境(JRE)的一部分
JVM 的优点
- Java 跨平台的基础,屏蔽底层操作系统的差异
- 自动的垃圾回收机制 GC
- 数组下标越界检查(不会像 C 语言一样覆盖越界空间)
JVM、JRE、JDK 的关系
- JRE是Java Runtime Environment(Java运行时环境)的简称, 包括JVM虚拟机和Java基础类库, 为编译好的Java程序(.class字节码文件)提供运行环境.
- JDK是Java Development Kit(Java开发工具包)的简称, 不仅包括JRE, 而且包括编译Java源文件(.java)所需的编译器和各种调试分析的工具.
- JRE提供给想运行Java程序的用户使用; JDK提供给Java开发者使用
学习路线
- 类通过 ClassLoader(类加载器)加载到内存中
- 类模板(元数据 Class)存放在方法区 Method Area 中
- 类对象存放在堆 Heap 中
- 当对象调用方法时,需要使用到虚拟机栈(JVM Stacks)、程序计数器(PC Register)、本地方法栈(Native Method Stacks)
- 代码的逐行执行需要使用到解释器(解释器:将字节码指令翻译成0101的机器码供CPU执行)
- 对于热点代码会使用即时编译器(JIT)进行优化
- 垃圾回收GC会自动回收一些不被引用的对象
- 本地方法接口用于实现一些 Java 代码不方便实现的功能,涉及操作系统底层,使用 C 语言进行实现
学习顺序
- JVM 内存结构:堆、栈、方法区等
- GC 垃圾回收机制
- 前端编译器的优化(.java到.class)
- 字节码文件、类加载器
- 运行时的 JIT 优化
JVM 监控工具的使用
使用 System.in.read()
来阻塞应用程序