双亲委派机制启动类加载器的顺序
时间: 2024-02-19 19:55:06 浏览: 24
根类加载器是Java虚拟机内置的类加载器,它负责加载Java平台核心库,如`java.lang`等。启动类加载器是所有类加载器中最顶层的类加载器,它负责加载Java平台核心库,如`rt.jar`等。在双亲委派机制中,当一个类加载器需要加载一个类时,它会先委托它的父类加载器去加载,直到委托到启动类加载器为止。如果启动类加载器无法加载该类,则会向下委托给它的子类加载器去加载。因此,启动类加载器的顺序是最先被尝试的。
相关问题
双亲委派机制和类加载器
双亲委派机制是指在Java中,类的加载是通过父子关系的方式来进行的。当一个类需要被加载时,首先会委托它的父类加载器去加载,如果父类加载器无法加载该类,再由自己的类加载器去加载。这样一层一层的向上委托,直到最顶层的启动类加载器,如果它也无法加载该类,则会抛出ClassNotFoundException异常。
类加载器则是负责将类的字节码文件加载到内存中,并生成对应的Class对象。Java中有三种类加载器:启动类加载器、扩展类加载器和应用程序类加载器。
java类加载双亲委派机制
Java类加载器采用双亲委派机制,这是Java安全模型的重要组成部分。这种机制保证Java核心API不会被随意篡改,同时也保证了Java程序的稳定性和安全性。
双亲委派机制的基本原则是:当一个类加载器接收到类加载请求时,它首先将该请求委派给它的父类加载器去完成,直到最顶层的父类加载器。只有在父类加载器无法完成类加载任务时,才由子类加载器自行加载。这种机制确保了Java核心API的安全性,因为只有Bootstrap ClassLoader能够加载Java核心API,其他类加载器都无法篡改这些类。
在双亲委派机制中,每个类加载器都有一个父类加载器。如果一个类加载器需要加载某个类,它会先委托给它的父类加载器去加载。如果父类加载器无法加载该类,才会由该类加载器自己去加载。这样一来,如果一个类已经被加载了,那么其类加载器的父类加载器肯定已经加载了该类,因此不会重复加载,也就避免了类的重复加载。
双亲委派机制的实现是通过ClassLoader类的loadClass()方法实现的。这个方法首先检查是否已经加载了该类,如果已经加载了就直接返回,否则就委托给父类加载器去加载。如果父类加载器无法加载该类,就调用findClass()方法自己加载。这样一来,每个类加载器都只需要实现自己的findClass()方法,而loadClass()方法则由ClassLoader类统一实现,从而实现了双亲委派机制。