jvm原理介绍
1. 类加载机制(Class Loading Mechanism):
• 定义:JVM把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被JVM直接使用的Java类型的过程。
• 比喻:就像你点了一份外卖,从餐厅制作完成(Class文件),到你拿到手里(加载到内存),再到你拆开包装检查食物(校验、转换解析),最后开始享用(初始化)。
2. 类加载器(Class Loader):
• 定义:负责加载类的类。JVM提供了一套从类加载器(Bootstrap ClassLoader、Extension ClassLoader、Application ClassLoader等)到类的映射关系。
• 比喻:就像是外卖小哥,负责把外卖(Class文件)从餐厅(文件系统或网络)送到你手里(JVM内存)。
3. 运行时数据区(Runtime Data Area):
• 定义:JVM在运行时管理内存的区域,包括方法区、堆、Java栈、本地方法栈和程序计数器。
• 比喻:就像是你家里的厨房,有冰箱(堆)、橱柜(方法区)、灶台(Java栈)、调料架(本地方法栈)和计时器(程序计数器)。
4. 方法区(Method Area):
• 定义:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
• 比喻:就像是橱柜里的食谱和调料,都是烹饪(执行程序)时需要用到的重要物品。
5. 堆(Heap):
• 定义:所有对象实例和数组的内存分配都在这里进行,是GC(垃圾收集器)管理的主要区域。
• 比喻:就像是冰箱,用来存放各种食材(对象实例),GC就像是冰箱除霜,清理掉过期的食材。
6. Java栈(Java Stack):
• 定义:每个线程私有,存储局部变量表、操作数栈、动态链接、方法出口等信息。
• 比喻:就像是你的私人灶台,上面放着你的调料(局部变量)、食材(操作数栈)和食谱(方法)。
7. 本地方法栈(Native Method Stack):
• 定义:为JVM使用到的Native方法服务,是执行Native方法时JVM为其分配的内存区域。
• 比喻:就像是你的调料架上的特殊调料,虽然也是用来烹饪的,但它们是进口的,需要特别对待。
8. 程序计数器(Program Counter Register):
• 定义:当前线程所执行的字节码的行号指示器,是线程私有的。
• 比喻:就像是你的计时器,记录着你烹饪的每一步(执行的字节码指令)。
9. 垃圾收集器(Garbage Collector, GC):
• 定义:自动回收不再使用的对象所占用的内存空间,确保JVM的内存使用效率。
• 比喻:就像是家里的清洁工,定期清理掉不再需要的物品(对象),保持家里的整洁(内存使用效率)。
10. JIT编译(Just-In-Time Compilation):
• 定义:JVM在运行时将字节码转换成机器码的过程,以提高执行效率。
• 比喻:就像是你把食谱(字节码)翻译成你能直接理解的语言(机器码),这样你就能更快地烹饪出美食(执行程序)。