企业免费建站网站,毕设做购物网站系统的原因,设计网站案例网站,在线代理服务器地址什么是双亲委派机制#xff1f;
Parent Delegation Model #xff0c;直译过来可能叫做父级委托模型更容易理解
类的加载过程
Java 编译器将 Java源文件编译成.class 文件再由 JVM 加载 .class 文件到内存中JVM 装载完成后得到一个 Class 字节码对象拿到字节码对象之后
Parent Delegation Model 直译过来可能叫做父级委托模型更容易理解
类的加载过程
Java 编译器将 Java源文件编译成.class 文件再由 JVM 加载 .class 文件到内存中JVM 装载完成后得到一个 Class 字节码对象拿到字节码对象之后 就可以实例化了类的加载过程需要使用到加载器JVM 设计了 3 个类加载器 分别是 Bootstrap 类加载器、 Extension 类加载器和 应用类加载器这些类加载器分别加载不同作用范围的 jar 包和.class 文件 Bootstrap ClassLoader 主要是负责 Java 核心类库的加载 也就是 %{JDK_HOME}\lib 下的 rt.jar、resources.jar 等Extension ClassLoader 主要负责%{JDK_HOME}\lib\ext 目录下的 jar 包和 class 文件Application ClassLoader 主要负责当前应用里面的 classpath 下的所有 jar 包和类文件 除了系统自己提供的类加载器以外还可以通过 ClassLoader 类实现自定义加载器去满足一些特殊场景的需求
双亲委派机制
双亲委派机制 也叫父级委托模型 就是指按照类加载器的层级关系 逐层进行委派我们需要加载一个 class 文件的时候首先会把这个 class 的查询和加载委派给父加载器去执行如果父加载器都无法加载 再尝试自己来加载这个 class
意义
保证安全性因为这种层级关系实际上代表的是一种优先级也就是所有的类的加 载 优先给 Bootstrap ClassLoader对于核心类库中的类 就没办法去破坏 比如自己写一个 java.lang.String 最终还是会交给 Bootstrap 类加载器加载再加上每个类加载器都有不同的作用范围 这就意味着自己写的 java.lang.String 没办法去覆盖核心类库中类避免重复加载这种层级关系的设计可以避免类重复加载导致程序混乱的问题即如果父加载器已经加载过了 那么子加载器就没必要去加载了
Tomcat的自定义类加载器 Tomcat在初始化的时候自定义了三个类加载器和其他的两个类加载器 CommonLoader加载Tomcat所需要的jar包和class文件可以被Tomcat容器本身以及各个Webapp访问CatalinaLoaderTomcat容器私有的类加载器加载路径中的class对于Webapp不可见SharedLoader各个Webapp共享的类加载器加载路径中的class对于所有Webapp可见对于Tomcat不可见WebAppClassLoader各个Webapp私有的类加载器加载路径中的class只对当前Webapp可见JasperLoader它出现的目的就是为了被丢弃加载路径仅仅是某个JSP文件所编译出来的那一个.class文件
意义
隔离同类库不同版本因为Tomcat是可以部署多个Web应用程序的共享同类库同版本多个应用程序如果依赖相同类库的相同版本应该共享同类库的同版本避免重复的类库被加载进JVM隔离Tomcat与应用程序的类库Tomcat也有自己依赖的类库不能与应用程序的类库冲突热部署修改jsp内容后无需重启项目将它重新加载到内存中每个jsp对应一个唯一的类加载器当检测到jsp内容发生更改的时候直接卸载唯一的类加载器然后重新创建类加载器并加载jsp文件。