Java虚拟机对
Class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的
Class文件加载到内存生成
Class对象。而且加载某个类的
Class文件时,
Java`虚拟机采用的是双拼委派模式,即把请求交给父类处理,它是一种任务委派模式。
- 如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行。
- 如果父类还存在父类加载器,则进一步向上委托,依次递归。最终请求到达顶层的启动类加载器。
- 如果父类加载器可以完成类加载任务,就由父类加载,倘若无法完成,则才由子类加载器完成加载任务。
例如我们创建java.lang
的包并创建String
类。
当我们new String()
时,并不会创建我们自定义的String
类。
而是由启动类加载器加载了java.lang
包下的核心String
。
优势:
- 避免类的重复加载。
- 保护程序安全,防止核心
API
被恶意篡改。