JVM双亲委派模型
Java类加载器 双亲委派模式要求除了顶层的BootstrapClassLoader之外,其余的类加载器都应当有自己的父类加载器,双亲委派模式中的父子关系并非通常所说的类继承关系,而是 采用组合关系来复用父类加载器的相关代码 类加载器之间的关系如下: 类装载方式: 隐式装载,程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。 显式装载, 通过class.forName()等方法,显式加载需要的类 类加载的动态性体现: 一个应用程序总是由n多个类组成,Java程序启动时,并不是一次把所有的类全部加载后再运行,它总是先把保证程序运行的基础类一次性加载到jvm中,其它类等到jvm用到的时候再加载,这样的好处是节省了内存的开销,因为java最早就是为嵌入式系统而设计的,内存宝贵,这是一种可以理解的机制,而用到时再加载这也是java动态性的一种体现 双亲委派模型的工作原理 当一个类加载器收到了类加载请求后,他并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,一次递归,最终找到最顶层的BootstrapClassLoader,如果父类加载器可以完成此类加载任务,则成功返回,否则父类加载器会抛出异常,通知子类加载器自己去加载,这是子类加载器才会尝试自己去加载,这就是双亲委派模型。