JVM 之 Class文件Load到内存的过程

本文详细介绍了JVM中class文件的生命周期,重点解析了加载(Loading)过程,包括ClassLoader的工作原理、双亲委派模型及其作用。双亲委派避免了类的重复加载,并确保核心类库的安全。同时,文章讨论了如何自定义ClassLoader并打破双亲委派,以实现特定场景下的类加载策略,例如Tomcat的热加载机制。
摘要由CSDN通过智能技术生成

class文件的周期

  1. Loading 到内存
  2. Linking
    verification (验证class文件,“cafe babe”)
    preperation (class静态变量赋默认值 int->0 object->null)
    resolution
  3. initializing (静态变量赋初始值)

Loading 的过程

ClassLoader

有4个ClassLoader,自上而下为:
1. bootstrap (C++实现的,Java中调用c++的方法)
2. ExtClassLoad
3. AppClassLoad
4. 自定义ClassLoad
4个ClassLoader 通过 双亲委派 的方法进行加载class文件
在这里插入图片描述

双亲委派

即:classload加载class文件,首先先向上询问自己的父加载器(不是父类,是classload里的parent属性)是否已加载此class文件(类似于缓存,用一个set来保存已加载的class),一直询问到最上层的classload,如果有则返回;如果没有,则调用自己的loadClass方法进行加载,若无法加载,则向下让子加载器调用loadClass加载,一直到最后一层若还妹有加载,抛出classNotFount异常。
双亲委派由loadClass方法实现
源码如下:

在这里插入代码片

自定义ClassLoader

  1. 集成 ClassLoad类,重写findClass方法
public class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值