问题一:什么是双亲委派机制?
什么是双亲委派机制?
参考回答:
双亲委派机制是Java类加载器在协同工作时默认使用的一种模型。在加载类时,系统会首先判断当前类是否被加载过,若已被加载则直接返回,否则尝试加载。加载请求会先委派给父类加载器的loadClass()方法处理,最终应传达到顶层的启动类加载器BootstrapClassLoader。当父类加载器无法处理时,才由自己来处理。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627186
问题二:使用双亲委派机制有哪些好处?
使用双亲委派机制有哪些好处?
参考回答:
双亲委派机制保证了JDK核心类的优先加载,有助于Java程序的稳定运行,可以避免类的重复加载,同时也保证了Java的核心API不被篡改。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627187
问题三:如何破坏双亲委派机制?
如何破坏双亲委派机制?
参考回答:
可以通过以下几种方式破坏双亲委派机制:自定义一个类加载器并重写其loadClass方法;像Tomcat那样加载自己目录下的class文件而不传递给父类加载器;或者利用Java的SPI机制,其中BootstrapClassLoader作为发起者直接获取了AppClassLoader进行驱动加载,这与双亲委派是相反的。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627188
问题四:Tomcat的类加载机制是怎样的?
Tomcat的类加载机制是怎样的?
参考回答:
Tomcat的类加载机制首先会在本地cache中查找类是否已经加载过。如果没有,则会从系统类加载器的cache中查找。若仍未找到,Tomcat会尝试使用ExtClassLoader来加载类,而不是首先使用AppClassLoader,这实际上违背了双亲委派机制。如果BootstrapClassLoader没有加载成功,Tomcat会调用自己的findClass方法来加载类。仅当这些步骤都失败后,才会使用AppClassLoader继续尝试加载。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627189
问题五:为什么Tomcat要打破双亲委派机制?
为什么Tomcat要打破双亲委派机制?
参考回答:
Tomcat打破双亲委派机制主要是为了避免Web应用之间的类冲突。每个Web应用可能使用不同版本的类库,如果按照传统的双亲委派机制,那么这些类库都会被加载到共享的父类加载器中,可能导致版本冲突。通过自定义类加载机制,Tomcat可以确保每个Web应用都有其独立的类空间。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627190