restartclasscloader和appclassloader重复加载了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了restartclasscloader和appclassloader重复加载了相关的知识,希望对你有一定的参考价值。

参考技术A . 用户自定义的类是由 应用(系统)类加载器AppClassLoader加载

2. 在”父亲委托机制”中,扩展类加载器ExtClassLoader是AppClassLoader的父亲,并不是继承关系,而是ExtClassLoader加载了AppClassLoader

3. AppClassLoader 和 ExtClassLoader 都扩展于 URLClassLoader加载器.

4. 也同时说明AppClassLoader而非继承ExtClassLoader

类加载器

1.系统提供三个类加载器

下面是三种类加载器加载类文件的地方:

1) BootstrapClassLoader(启动类加载器)Bootstrap类加载器 – JRE/lib/rt.jar(开发时候用的核心类)

2) ExtensionClassLoader(标准扩展类加载器)Extension类加载器 – JRE/lib/ext或者java.ext.dirs指向的目录(扩展包)

3) AppClassLoader(系统类加载器) Application类加载器 – 加载ClassPath中jar包和class文件

MyClassLoader都是AppClassLoader加载器的子类

4)CustomClassLoader(自定义加载器) 
  属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现。

2.这三个类加载器是树状结构

3.类加载过程:

     一个类A是由一个类加载器加载的,如果类A中使用了类B,类B也是由类A的加载器所加载

4.类加载器的工作原理是基于委托机制的:

  发起者类加载器 去加载类的时候,先委托其给父类加载,如果还有父类加载器,则继续委托上去,直到没有父加载器为止,

   最顶层的类加载器需要真正的去加载指定类,如果在其目录中找不到这个类,继续往下查找,直到发起者类加载器为止。

 

委托机制的好处是:

    可以让代码更加安全!

     (无论new多少个类实例,内存中只加载一次类文件(字节码文件))

5. 类加载器的顺序 
  1)加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载

  就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。 
  2)在加载类时,每个类加载器会将加载任务上交给其父,如果其父找不到,再由自己去加载。 

  3)Bootstrap Loader(启动类加载器)是最顶级的类加载器了,其父加载器为null。

 

在类的加载过程中,静态成员类的对象,会优先加载;而普通成员类的对象则是使用的时候才回去加载。

6.一个web的servlet的加载顺序:

  1)WebappClassLoader(tomcat自定义类加载器):

      加载web/WEB-INF/classes/    类

       加载web/WEB-INF/lib/  *.jar jar包

      WebappClassLoader的设计的目录为了分离服务器中每个web应用,让每个web应用互不干扰

      打破了委托机制,为了保持优先加载当前web应用的所有资源

  2)StandardClassLoader:((tomcat自定义类加载器))加载tomcat/lib/*.jar

      用户加载所有的web用到的jar包或类

  3)AppClassLoader:classpath为空的,失效的,在这里用不到,因为WebappClassLoader已经加载了classpath的类

  4)ExtClassLoader

  5)BoosStrap

 

以上是关于restartclasscloader和appclassloader重复加载了的主要内容,如果未能解决你的问题,请参考以下文章

在 TestFlight 中测试 AppClip:显示卡片?

如果我使用 mod rewrite,是不是需要使用 ProxyPassReverse?

& 和 && 区别和联系,| 和 || 区别和联系

第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等

shell中$()和 ` `${}${!}${#}$[] 和$(()),[ ] 和(( ))和 [[ ]]

Java基础8---面向对象代码块和继承和this和super和重写和重载和final