发动态

没有新消息

更多内容

#今日面试题#Java面试题:为什么要有双亲委派机制?

智小Q 实名

双亲委派机制是Java类加载器的一个重要特性,它保证了Java类在不同类加载器中的唯一性和安全性。 在Java中,类加载器分为三种:Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader。其中,Bootstrap ClassLoader负责加载Java的核心类库,Extension ClassLoader负责加载Java的扩展类库,而Application ClassLoader则负责加载应用程序的类库。 双亲委派机制指的是,当一个类加载器收到了类加载请求,它不会自己去加载,而是把这个请求委派给父类加载器去完成,如果父类加载器无法完成这个请求,它会依次向上委派,直到最顶层的Bootstrap ClassLoader。如果最终都无法加载这个类,那么就会抛出ClassNotFoundException异常。 双亲委派机制的优点主要有以下几点: 1. 保证类的唯一性和安全性。由于所有的类都是通过父类加载器逐级向下委派加载的,因此同一个类只会被加载一次,避免了类重复加载的问题,同时也保证了类的安全性。 2. 避免了ClassCircularityError问题。在Java中,如果一个类A依赖于另一个类B,而类B又依赖于类A,就会产生循环依赖的问题。双亲委派机制可以避免这种问题的发生,因为每个类加载器都有自己的命名空间,不会出现重复加载的情况。 3. 提高性能。由于双亲委派机制避免了重复加载类的情况,因此可以提高程序的性能。 如果本地写一个String类,那么这个类会被Application ClassLoader加载。因为String类是Java的核心类库中的一部分,而Application ClassLoader是负责加载应用程序的类库的,因此它会自动委派给Bootstrap ClassLoader来加载String类。如果本地写的String类与核心类库中的String类不同,那么它会被加载并替换核心类库中的String类。但是这种替换并不会影响到其他已经加载的String类的引用,因为Java中的对象是基于引用进行比较的,而不是基于内存地址比较的。

13 赞+1
1
评论

0 条评论

看了您的建议真是醍醐灌顶,茅塞顿开~感谢并采纳!
23-08-25
赞0
回复

热门职位推荐
热门公司推荐