类加载专项

参考:
https://blog.csdn.net/javazejian/article/details/73413292
https://blog.csdn.net/ln152315/article/details/79223441
https://zhuanlan.zhihu.com/p/92534103

  1. 什么是类加载?
    编译: 将.java文件编译成.class文件
    加载: 将class文件(字节码文件)加载进虚拟机内存,并进行解析生成对应的java.lang.Class对象的过程

  2. 什么时候会进行类加载?
    ①调用该类的构造方法 ②调用该类的静态属性或方法 ③使用子类时也会触发父类的加载

  3. JVM的类加载机制是什么?
    双亲委派机制 类加载器会先让自己的父类来加载,父类无法加载的话,才会自己来加载
    ①如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;
    ②如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器;
    ③如果父类加载器可以完成加载任务,就成功返回,倘若父类加载器无法完成此挤在任务,子加载器才会尝试自己去加载,这就是双亲委派模式。

  4. 可不可以自己写一个String类?
    答:可以但是必须包名不同,因为 根据类加载的双亲委派机制,会去加载父类,父类中有String类了,就不会加载新的String类了

  5. 能否在加载类的时候,对类的字节码进行修改
    答:可以,使用Java探针技术 参考:https://www.cnblogs.com/aspirant/p/8796974.html

  6. 双亲委派的好处
    答: ①避免同一个类被多次加载;②每个加载器只能加载自己范围内的类 ③防止核心API被篡改

  7. 类加载过程
    答:加载,连接(验证,准备,解析),初始化

  8. tomcat为什么要打破双亲委派机制?
    ①对于各自的wabapp包,要相互隔离,不能相互影响 ②安全问题,避免恶意破坏 ③热部署

  9. JDBC为什么要破坏双亲委派模型? 参考:https://www.jianshu.com/p/60dbd8009c64 及 https://www.sohu.com/a/334000357_505800
    答:原生的JDBC中Driver驱动只是一个接口,并没有具体的实现,具体的实现是由不同数据库类型去实现的
    原生的JDBC中的类是放在rt.jar包的,是由启动类加载器进行类加载的,在JDBC中的Driver类中需要动态去加载不同数据库类型的Driver类
    如MySql中的mysql-connector-.jar中的具体实现就是用户自己写的,就需要用应用程序类去加载.
    这个时候就引入线程上下文件类加载器(Thread Context ClassLoader)。
    有了这个东西之后,程序就可以把原本需要由启动类加载器进行加载的类,由应用程序类加载器去进行加载了
    这是SPI机制 jdk中的基础类作为用户典型的api被调用,但是也存在被api调用用户的代码的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值