请解释JVM中的双亲委派模型,包括它的基本工作流程、设计目的以及一个它可能被破坏的场景。
考察说明
考察对JVM类加载机制的理解,包括双亲委派的工作流程、设计目的及潜在缺陷。
回答思路
- 【回答框架 1】双亲委派模型是JVM类加载器之间的一种协作机制,除了启动类加载器,每个类加载器在加载类时,都会先委托给父加载器,只有父加载器无法完成加载时,自身才会尝试加载。
- 【回答框架 2】该模型主要目的是避免类被重复加载,并确保核心类库(如java.lang.Object)由启动类加载器统一加载,从而防止核心API被随意覆盖,保证Java类型体系的一致性和安全性。
- 【回答框架 3】一个常见的破坏场景是自定义类加载器重写loadClass方法,不遵循委托逻辑,直接加载类,这可能导致同名类在不同上下文出现,引发冲突或安全漏洞,典型如JDBC等SPI机制,通过线程上下文类加载器打破双亲委派。
- 【关键点 1】双亲委派原则:先父后子,父加载器找不到才由自身加载。
- 【关键点 2】核心作用是避免重复加载,保证核心类库安全。
- 【关键点 3】线程上下文类加载器可用于加载SPI实现,打破了双亲委派。
- 【易错点 1】不要误以为所有类加载器都严格遵循双亲委派,适当场景可以打破。
- 【易错点 2】注意区分findClass和loadClass,重写loadClass会破坏委派逻辑。
- 【易错点 3】解释时不能只说委托给父加载器,要强调父加载器找不到才自己加载。