java类加载机制简介---JVM(二)

文章目录

  • 类加载器介绍
    • 类加载器种类
  • 类加载机制
    • 双亲委派机制
      • 含义
    • 全盘负责委托机制
      • 含义
  • 划重点(∩_∩)

类加载器介绍

类加载器种类

  1. 启动类加载器(也叫引导类加载器。Bootstrap):这个类加载器负责放在\lib目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库。负责加载jre的核心类库,如jre目标下的rt.jar等等,用户无法直接使用。
    Bootstrap类加载器没有任何父类加载器,如果你调用String.class.getClassLoader(),会返回null,任何基于此的代码会抛出NUllPointerException异常。Bootstrap加载器被称为初始类加载器。

  2. 扩展类加载器(Extension):这个类加载器由sun.misc.Launcher$ExtClassLoader实现。它负责\lib\ext目录中的,或者被java.ext.dirs系统变量所指定的路径中的所有类库。用户可以直接使用。

  3. 应用程序类加载器(Application):这个类由sun.misc.Launcher$AppClassLoader实现。是ClassLoader中getSystemClassLoader()方法的返回值。它负责用户路径(ClassPath)所指定的类库。用户可以直接使用。如果用户没有自己定义类加载器,默认使用这个。

  4. 自定义加载器:用户自己定义的类加载器。

java类加载机制简介---JVM(二)_第1张图片
代码示例:

package test;

public class TestJDKClassLoader {
	public static void main(String[] args) {
		System.out.println(String.class.getClassLoader());
		System.out.println(com.sun.crypto.provider.DESKeyFactory.class.getClassLoader().getClass().getName());
		System.out.println(TestJDKClassLoader.class.getClassLoader().getClass().getName());
		System.out.println(ClassLoader.getSystemClassLoader().getClass().getName());
	}
}

TestJDKClassLoader运行结果:

null
sun.misc.Launcher$ExtClassLoader
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$AppClassLoader

类加载机制

类加载机制分为:双亲委派机制和全盘负责委托机制。

双亲委派机制

含义

当需要加载一个类的时候,子类加载器并不会马上去加载,而是依次去请求父类加载器加载,一直往上请求到最高类加载器:启动类加载器。当启动类加载器加载不了的时候,依次往下让子类加载器进行加载。当达到最底下的时候,如果还是加载不到该类,就会出现ClassNotFound的情况。

注意:父类加载器和子类加载器不同于ava代码中父类子类的关系,不是继承制,而是AppClassLoader中有一个ExtClassLoader的引用,

好处:

  • 沙箱安全机制:保证了程序的安全性。
    例子:比如我们重新写了一个String类,加载的时候并不会去加载到我们自己写的String类,因为当请求上到最高层的时候,启动类加载器发现自己能够加载String类,因此就不会加载到我们自己写的String类了。
  • 避免重复加载。父类加载器加载后子类加载器就不会加载。

全盘负责委托机制

含义

“全盘负责”是指当一个ClassLoader装载一个类时,除非显示地使用另一个ClassLoader,则该类所依赖及引用的类也由这个CladdLoader载入。

例如:系统类加载器AppClassLoader加载入口类(含有main方法的类)时,会把main方法所依赖的类及引用的类也载入,依此类推。“全盘负责”机制也可称为当前类加载器负责机制。显然,入口类所依赖的类及引用的类的当前类加载器就是入口类的类加载器。

划重点(∩_∩)



本人程序媛一枚,因为离港澳较近,周末兼职港澳人肉代购。

欢迎各位大佬添加本人微信,还会经常有点赞活动送价值不菲的小礼品哦。

即使现在不需要代购,等以后有了女(男)朋友、有了宝宝就肯定会需要的喽。

动动手指头,扫码一下,就当是对本博文的支持嘛,也是对一个平凡、勤劳、勇敢、秀外慧中等等优点的程序媛莫大的支持哈。
java类加载机制简介---JVM(二)_第2张图片

你可能感兴趣的:(java理论,JVM)