【发布时间】:2015-08-22 05:31:45
【问题描述】:
根据我的阅读,当 JVM 需要一个类时,会发生以下事件:
- 请求被发送到应用程序类加载器以加载类。
- 应用程序类加载器将请求委托给扩展类加载器。
- 扩展类加载器将请求委托给 Bootstrap 类加载器。
- Bootstrap 类加载器尝试从 Bootstrap 类路径加载类。如果在那里找到类,则加载它。
- 如果引导类路径中不存在类,则扩展类加载器会尝试从扩展类路径加载类。
- 如果类即使在扩展类路径中也不存在,则应用程序类加载器会尝试从应用程序类路径(即 CLASSPATH 环境变量路径)加载类。
- 如果类不存在,则抛出 ClassNotFoundException。
问题: 当每一个类加载请求最终都必须交给 Bootstrap 类加载器时,为什么 JVM 会先承担请求 Application Class loader 的开销,然后让它逐渐将请求委托给 Bootstrap 类加载器。 为什么不直接请求Bootstrap类加载器?
是否有任何具体原因,或者我缺少一些东西,我需要阅读更多内容?
【问题讨论】:
标签: java class classloader classnotfoundexception