处对象,要看祖宗三代!
Java3y
共 2646字,需浏览 6分钟
·
2021-07-04 04:28
《对线面试官》系列目前已经连载26篇啦!有深度风趣的系列!
-
【对线面试官】Java注解 -
【对线面试官】Java泛型 -
【对线面试官】 Java NIO -
【对线面试官】Java反射 && 动态代理 -
【对线面试官】多线程基础 -
【对线面试官】 CAS -
【对线面试官】synchronized -
【对线面试官】AQS&&ReentrantLock -
【对线面试官】线程池 -
【对线面试官】ThreadLocal -
【对线面试官】CountDownLatch和CyclicBarrier -
【对线面试官】为什么需要Java内存模型? -
【对线面试官】Java从编译到执行,发生了什么? -
【对线面试官】List -
【对线面试官】Map -
【对线面试官】SpringMVC -
【对线面试官】Spring基础 -
【对线面试官】SpringBean生命周期 -
【对线面试官】Redis基础 -
【对线面试官】Redis持久化 -
【对线面试官】Kafka基础 -
【对线面试官】使用Kafka会考虑什么问题? -
【对线面试官】MySQL索引 -
【对线面试官】MySQL 事务&&锁机制&&MVCC -
【对线面试官】MySQL调优
今日内容总结
前置知识:JDK中默认类加载器有三个:AppClassLoader、Ext ClassLoader、BootStrap ClassLoader。AppClassLoader的父加载器为Ext ClassLoader、Ext ClassLoader的父加载器为BootStrap ClassLoader。这里的父子关系并不是通过继承实现的,而是组合。
什么是双亲委派机制:加载器在加载过程中,先把类交由父类加载器进行加载,父类加载器没找到才由自身加载。
双亲委派机制目的:为了防止内存中存在多份同样的字节码(安全)
类加载规则:如果一个类由类加载器A加载,那么这个类的依赖类也是由「相同的类加载器」加载。
如何打破双亲委派机制:自定义ClassLoader,重写loadClass方法(只要不依次往上交给父加载器进行加载,就算是打破双亲委派机制)
打破双亲委派机制案例:Tomcat
-
为了Web应用程序类之间隔离,为每个应用程序创建WebAppClassLoader类加载器 -
为了Web应用程序类之间共享,把ShareClassLoader作为WebAppClassLoader的父类加载器,如果WebAppClassLoader加载器找不到,则尝试用ShareClassLoader进行加载 -
为了Tomcat本身与Web应用程序类隔离,用CatalinaClassLoader类加载器进行隔离,CatalinaClassLoader加载Tomcat本身的类 -
为了Tomcat与Web应用程序类共享,用CommonClassLoader作为CatalinaClassLoader和ShareClassLoader的父类加载器 -
ShareClassLoader、CatalinaClassLoader、CommonClassLoader的目录可以在Tomcat的catalina.properties进行配置
线程上下文加载器:由于类加载的规则,很可能导致父加载器加载时依赖子加载器的类,导致无法加载成功(BootStrap ClassLoader无法加载第三方库的类),所以存在「线程上下文加载器」来进行加载。
文章以纯面试的角度去讲解,所以有很多的细节是未铺垫的。
鉴于很多同学反馈没看懂【对线面试官】系列,基础相关的知识我确实写过文章讲解过啦,但有的同学就是不爱去翻。
我把这些上传到网盘,你们有需要直接下载就好了。
评论