JVM架构深度解析
文章目录
写在前面:把复杂原理变成身边故事
很多朋友觉得JVM像台精密仪器,满是看不懂的齿轮和按钮。其实我们可以把它想象成一家24小时营业的火锅店——类加载是采购食材,内存管理是后厨储物,执行引擎是炒料师傅。今天我们就用吃火锅的场景,带你轻松看懂JVM的内部构造。准备好蘸料,我们开涮!
第一章 类加载子系统:食材供应链
1.1 买菜三部曲
每天早上六点,火锅店的采购员(类加载器)都会去市场进货,这个过程分三步走:
第一步:按清单找货(加载)
采购员拿着店长给的购物清单(全限定类名),先到常去的批发市场(Bootstrap ClassLoader负责的核心类库)找食材。如果找不到,就去副食店(Extension ClassLoader管理的扩展类)看看,最后才去菜市场(Application ClassLoader对应的应用类)。
第二步:食材质检(验证)
不是所有食材都能进后厨,比如:
- 检查土豆有没有发芽(魔数校验)
- 确认牛肉检疫合格(字节码验证)
- 核对送货单和实物是否一致(符号引用验证)
第三步:入库登记(准备与解析)
合格的食材要分门别类存放,就像把蔬菜放进冷藏库(方法区存储类信息),调料摆上货架(常量池初始化),同时记下每种食材的位置(内存分配)。
现在让我们想象一个场景:火锅店突然推出新菜品藤椒锅底,需要紧急采购青花椒。这时候采购流程就体现出灵活性——如果常规供应商都没有货,店里会启用特别采购渠道(自定义类加载器)。但要注意的是,不能随便让不明来源的食材混入(安全机制),就像不能允许来历不明的类危害JVM安全。这个机制既保证了日常经营的稳定性,又保留了应对变化的弹性,正是JVM设计智慧的体现。接下来我们要看看这些"食材"是如何在后厨被加工处理的。
1.2 双亲委派:采购责任链
店里的采购规矩很有意思:新来的实习采购员(自定义类加载器)想买香菜,必须按流程请示:
- 先问正式采购员(应用类加载器)“你能买吗?”
- 正式采购员请示采购主管(扩展类加载器)
- 主管最终问大老板(启动类加载器)
- 如果所有上级都说"不归我管",实习生才能自己出手
这样做有三个好处:
- 避免重复采购(防止类重复加载)
- 保证核心调料统一(防止核心API被篡改)
- 特殊情况下允许灵活变通(比如热部署场景)
示例代码:采购流程模拟
扫描二维码关注公众号,回复:
17594176 查看本文章

public class VegetableBuyer {
// 上级采购员(父类加载器)
private ClassLoader parent;
public Class