四种类加载器的应用场景以及双亲委派模型

面试中会经常问到四种类加载器还有双亲委派机制。

首先了解下四种类加载器。

  • 启动类加载器(Bootstrap ClassLoader):由C++语言实现(针对HotSpot),负责将存放在\lib目录或-Xbootclasspath参数指定的路径中的类库加载到内存中。

  • 其他类加载器:由Java语言实现,继承自抽象类ClassLoader。如:

    • 扩展类加载器(Extension ClassLoader):负责加载\lib\ext目录或java.ext.dirs系统变量指定的路径中的所有类库。
    • 应用程序类加载器(Application ClassLoader)。负责加载用户类路径(classpath)上的指定类库,我们可以直接使用这个类加载器。一般情况,如果我们没有自定义类加载器默认就是用这个加载器。
    • 自定义类加载器,自己写代码决定加载哪个类  

2双亲委派机制很好理解,就是加载一个类时,自己先不加载,交给自己的父亲,爸爸搞不定就爷爷(bootstrap classloader)来. 只有当他们俩都加载不了的时候,才轮到自己加载。

好处就是保证系统的安全,类的唯一。试想黑客自定义一个java.lang.String类,该String类具有系统的String类一样的功能,只是在某个函数稍作修改。比如equals函数,这个函数经常使用,如果在这这个函数中,黑客加入一些“病毒代码”。并且通过自定义类加载器加入到JVM中。此时,如果没有双亲委派模型,那么JVM就可能误以为黑客自定义的java.lang.String类是系统的String类,导致“病毒代码”被执行。

你可能感兴趣的:(工作技术)