Java虚拟机探究第2讲: 类加载器ClassLoader,一年后斩获腾讯T3

编译文件为 .class文件,然后通过类加载,加载到JVM

  1. 连接阶段

第一步(验证):确保Class类文件没问题

第二步(准备):先初始化为 a=0。(因为你int类型的初始值为0)

第三步(解析):将引用转换为直接引用

  1. 初始化阶段:

通过此解析阶段,把1赋值为变量a




**类的加载**



下面是对于加载过程最为官方的描述。



加载阶段是类加载过程的第一个阶段。在这个阶段,JVM 的主要目的是将字节码从各个位置(网络、磁盘等)转化为二进制字节流加载到内存中,接着会为这个类在 JVM 的方法区创建一个对应的 Class 对象,这个 Class 对象就是这个类各种数据的访问入口。



其实加载阶段用一句话来说就是:把代码数据加载到内存中。这个过程对于我们解答这道问题没有直接的关系,但这是类加载机制的一个过程,所以必须要提一下。



**类加载器的分类**



*   Bootstrap ClassLoader 启动类加载器

*   Extention ClassLoader 标准扩展类加载器

*   Application ClassLoader 应用类加载器

*   User ClassLoader 用户自定义类加载器



### [](https://gitee.com/vip204888/java-p7)**2、双亲委派机制**



先看一段代码



package java.lang;

public class String {

//双亲委派机制:为了保证安全

//1.APP-->EXC-->BOOT(最终执行)

//BOOT

//EXC

//APP

public String toString(){

    return "hello";

}



public static void main(String[] args) {

    String s = new String();

    s.toString();

}

}




idea报了一个错误:  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210416170002863.png)  

这是因为,在运行一个类之前,首先会在应用程序加载器(APP)中找,如果APP中有这个类,继续向上在扩展类加载器EXC中找,然后再向上,在启动类( 根 )加载器BOOT中找。如果在BOOT中有这个类的话,最终执行的就是根加载器中的。如果BOOT中没有的话,就会倒找往回找。



**过程总结**



1.  类加载器收到类加载的请求

    

2.  将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器

    

3.  启动类加载器检查是否能够加载当前这个类,能加载就结束,使用当前的加载器,否则,抛出异常,一层一层向下,通知子加载器进行加载

    

4.  重复步骤3

    



# 最后

现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。

所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。

**[资料获取方式:戳这里免费下载](https://gitee.com/vip204888/java-p7)**

都是做分布式系统。

所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。

**[资料获取方式:戳这里免费下载](https://gitee.com/vip204888/java-p7)**

![](https://img-blog.csdnimg.cn/img_convert/d8c9b612ad20b889af080d1480d0bc3f.png)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值