java的类加载器过程_Java虚拟机原理图解之类加载器机制和类加载过程

1,Java语言跨平台是因为可以在大部分的操作平台中运行,因为它的运行环境是在Java虚拟机中的。Java虚拟机对各个平台来说就是各个平台的一个可执行程序

20212e56de311a4a2abc169d366c7d5e.png

2,具体运行步骤

2.1根据jvm内存配置要求,为jvm申请特定大小的内存空间

10cc47a7ceb7eac3add880a95bc904b5.png

2.2创建一个引导类加载器实例,初步加载系统类到内存方法区域

22b0faf5d338b267b926f0c039cef492.png

2.3创建JVM启动器实例Launcher(单例模式),并且获得类加载器ClassLoader。launcher内部有两个类加载器,

80425d9398406598fbab7012e785b8d5.png

双亲委派模型:子类加载器只能判断某个类是否被引导类加载器加载过,不能委托它加载某个类

a,委托父类加载器帮忙加载

b,父类加载器加载不了,查询引导类加载器有没有加载过

c,没有加载过,当前类加载器自己加载该类

d,加载成功返回对应的对象,加载失败,抛出异常,类找不到

1021ca15cabec39c0470494291092a8a.png

4,使用类加载器加载主类,首先查看主类的定义,根据主类定义,先去将主类内部声明的类成功加载到内存中,最后才加载主类

afcac09f667845c250b75218c2ced957.png

5,使用Main类的main方法作为程序入口的运行程序

6,方法执行完毕,jvm销毁,释放内存

三,类加载器

指的是可以加载类的工具。JVM自身定义了三个类加载器:

引导类加载器(Bootstrap Class Loader)、

使用C++语言实现的,不可以被Java代码访问到,我们可以插叙某个类是否被其加载过

拓展类加载器(Extension Class Loader )、

是整个jvm加载器的Java代码可以访问到的类加载器的最顶端,是超级父加载器,它没有父类加载器

应用加载器(Application Class Loader)

加载用户代码,

四,双亲委派模型的逻辑和底层代码

jdk自身默认的加载类的行为,我们可以通过继承复写该方法来改变行为

eeff7b87dd518e94cec01a569e0089ae.png

五,类加载器和Class对象的关系

00a14e3890c7638fbb42eca7f07d6eb9.png

6,线程上下文加载器

5c2226f388582b288108b73aaf16346f.png

可以为当前的线程指定类加载器,这样就绕过双亲委派模型,实现特定的加载需求

33ecf422c8f758f5901f18aaa5410e61.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值