没有新消息
问题来自于
淡忘如思
实名#今日面试题#Java面试题:为什么要有双亲委派机制?
有大佬能讲解一下嘛,个人理解是加载类的时候是优先往父类加载器加载,然后知道顶级加载器加载不了,逐层向下尝试加载。如果假设本地写一个String类,那这个类是会怎么样的进行加载呢,还是不会加载,因为自带就有String类🤔
6032
阅读
1
回答
合作商务邮箱:sbyh@zhaopin.com.cn
京ICP备17067871号 合字B2-20210134
违法不良信息举报电话:400-885-9898
关爱未成年举报热线:400-885-9898-7
朝阳区人力资源与社会保障局 监督电话: 57596212,65090445
#今日面试题#Java面试题:为什么要有双亲委派机制?
双亲委派机制是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中的对象是基于引用进行比较的,而不是基于内存地址比较的。