当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到jvm(java虚拟机)。
类加载机制主要分双亲委派机制和全盘负责委托机制。
类加载机制:类加载器将class文件加载到jvm内存中。
双亲委派机制:当某个类加载器需要加载某个.class
文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。
双亲委派机制的作用:
1、防止重复加载同一个.class
。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。
2、保证核心.class
不能被篡改。通过委托方式,不会去篡改核心.clas
,即使篡改也不会去加载,即使加载也不会是同一个.class
对象了。不同的加载器加载同一个.class
也不是同一个Class
对象。这样保证了Class
执行安全。
静态链接:把一些静态方法(符号引用,比如main()方法)替换为指向数据所存内存的指针或句柄(直接引用)。
动态链接:在程序运行期间完成的将符号引用替换为直接引用。
类加载过程步骤:加载、验证、准备、解析、初始化,使用、卸载
几种类加载器:
1、(启动)引导类加载器;
2、扩展类加载器;
3、应用程序类加载器;
4、自定义加载器;
参考了以下链接:https://www.jianshu.com/p/1e4011617650