`

(转)java类加载器及常用java应用服务器类加载机制简介

阅读更多
一.java类加载器机制简介



这个由Bootstrap Loader -> ExtClassLoader -> AppClassLoader,就是java类装载器的层次体系。

Bootstrap Loader是参考系统参数sun.boot.class.path;
ExtClassLoader是参考系统参数java.ext.dirs;
AppClassLoader 是参考从系统参数java.class.path取出的字符串。

Bootstrap Loader搜索路径是系统参数,无法更改,他的搜索路径为jdk目录\jre\lib下的一些jar包;
ExtClassLoader的搜索路径为jdk目录\jre\lib\ext下的所有class或jar包;
AppClassLoader的搜索路径为系统的classpath。

AppClassLoader和ExtClassLoader的搜索路径可以修改,但是不能在执行时间动态更改。

java中类装载采用“代理机制”,即子装载器如果需要装载一个类文件,首先会将此任务提交给父装载器,
如果父装载器找不到此类文件,才有子装载器来装载类文件,如果子装载器也找不到,
那么就会报告ClassNotFoundException异常。



如图所示:







二.tomcat应用服务器中的类加载机制



1.BootStrap classloader(加载JRE/lib下的rt.jar和其他重要jar文件)
2.ExtClassLoader (加载JRE/lib/ext下的jar文件,Java扩展框架使用)
3.AppClassLoader ($CATALINA_HOME/bin/下bootstrap.jar, commons-logging -api.jar,commons-daemon.jar,$JAVA_HOME/lib/tools.jar,jmx.jar)
4.common (加载$CATALINA_HOME/common/,Tomcat本身和Web App共享类)
5.Catalina (加载$CATALINA_HOME /server/,Tomcat本身使用的类)
Shared (加载$CATALINA_BASE /shared/,所有Web App共享类)
6.WebappClassLoader (加载各个Web App的class,不同的Web App被隔离开)

注意:Tomcat完全忽略了classpath的设置,而重新设置了classpath,所以AppClassLoader 载入的类将不是class path设置的类。



三.weblogic应用服务器中的类加载机制



当部署一个应用的时候,weblogic server会自动创建一个具有层次结构的类装载器。
在图中,
1. 系统类路径加载器负责装载应用中的所有的EJB JAR文件;
2. 应用程序加载器负责装载所有的Web application 中的WAR 文件(所有得jsp文件除外);
3. Jsp Classloader 负责装载Web application 中的所有的jsp 文件;

weblogic中默认有以下几个级别:
1.系统类路径,除了java路径和java扩展路径,这个算是级别最高的了。
2.APP-INF/lib or APP-INF/classes,它比系统类路径的级别低了一级。
3.WEB-INF/lib or WEB-INF/classes,这个应该是最低的级别了。

classLoader在装载类的时间会从上而下的顺序来装载类。首先装载java自身的类(安全考虑),如果没有找到要装载的类,就查找java扩展路径下的类,如果还没找到就系统类路径,在然后 APP-INF/lib or APP-INF/classes,再然后WEB-INF/lib or WEB-INF/classes。



如图所示:





  • 大小: 38.9 KB
  • 大小: 6.4 KB
分享到:
评论

相关推荐

    深入研究Java类加载机制 深入研究Java类加载机制

    - **Web容器中的类隔离**:不同的Web应用部署在同一台服务器上时,每个应用都有自己的类加载器,从而实现了类的隔离。 - **热部署**:通过自定义类加载器实现代码的热更新,无需重启服务即可更新部分类的实现。 - **...

    java类加载器

    这在某些场景下非常有用,比如在J2EE服务器中,每个应用可能有自己的类加载器,确保应用间的类隔离。 创建自定义类加载器需要继承`java.lang.ClassLoader`,并重写`findClass()`方法。在该方法中,可以读取类的字节...

    Java的类加载器

    这为Java的模块化和隔离提供了基础,例如,在Web应用服务器中,每个Web应用都有自己的类加载器,保证了不同应用之间的类隔离。 6. **类加载器的卸载** 由于Java的垃圾收集机制不直接回收类加载器,除非整个...

    Java类加载机制.doc

    Java 类加载机制是Java平台的核心特性之一,它负责将类的字节码加载到Java虚拟机(JVM)中并转换为运行时的类对象。理解这一机制对于优化应用程序性能和解决类相关的错误至关重要。 首先,类加载的过程分为三个主要...

    类加载器(java)

    类加载器的工作机制遵循“双亲委派模型”:当一个类加载器接收到加载类的请求时,它首先会委托父加载器去尝试加载,只有在父加载器无法加载的情况下,子加载器才会尝试自己去加载。这种设计可以防止类的重复加载,并...

    深入探讨 Java 类加载器

    【深入探讨 Java 类加载器】 Java 类加载器是Java虚拟机(JVM)的核心组成部分,它的主要任务是将Java类的字节码加载到JVM中以便执行。类加载器的概念始于JDK 1.0,最初是为了解决Java Applet在浏览器中的运行需求...

    java类加载机制原理与实现

    双亲委派机制是 Java 中的一种类加载机制,用于解决类加载器之间的关系。其工作原理是:当一个类加载器需要加载某个类时,首先将请求委派给其父加载器,如果父加载器可以加载该类,则由父加载器加载,否则继续委派给...

    java类加载器和核心机制.pdf

    在Java中,类加载器和类加载机制是非常重要的概念,它们使得Java具备了动态加载和热部署的能力,极大地提高了程序的灵活性。类加载器负责将.class文件加载到Java虚拟机中,并生成对应的java.lang.Class对象,以便JVM...

    Java类加载机制学习1

    这对于应用程序服务器和插件系统尤其有用,因为它允许组件使用自己的类加载器加载类,而不是依赖全局的类加载器。 总结起来,Java类加载机制的双亲模型保证了系统的稳定性,而自定义类加载器则提供了灵活性,允许...

    Java类加载原理解析

    线程上下文类加载器(Thread Context ClassLoader)则是在特定线程中使用的类加载器,主要用于解决一些应用服务器中类加载的复杂问题,如J2EE容器中的类加载需求。 总的来说,理解Java类加载机制对于排查类加载错误...

    Java类重新加载101对象类和类加载器Java开发Jav

    Java的类加载机制遵循双亲委派模型,即当一个类加载器接收到加载类的请求时,它会首先将这个任务委托给父类加载器,只有当父类加载器无法找到对应的类时,才会尝试自己去加载。这种设计有助于保持类的唯一性和避免...

    Java类加载.pdf

    总之,理解Java类加载机制对于优化Java应用性能至关重要,特别是对于Java EE环境下的大规模应用,合理配置和利用类加载器可以显著提升系统运行效率。同时,开发者应该关注Java版本的更新,充分利用新版本提供的性能...

    tomcat 类加载机制 —— ClassLoader

    在Java Web开发中,Tomcat作为最常用的Servlet容器,其类加载机制对于理解和优化应用性能至关重要。本文将深入探讨Tomcat的ClassLoader是如何工作的,以及它如何影响到我们的应用程序。 首先,理解类加载器...

    动态加载类机制JAVA

    - Java的类加载机制遵循双亲委派模型,即当一个类加载器接收到加载类的请求时,它首先会将请求委托给父类加载器。只有当父类加载器无法找到对应的类时,子类加载器才会尝试加载。这种设计有助于避免类的重复加载,...

    Java类加载内幕

    深入了解 Java 类加载机制对于开发高质量的应用程序至关重要。本文详细介绍了类加载的基础概念、类加载器的类型及其工作流程,并通过实际示例展示了如何创建自定义类加载器。掌握了这些知识后,开发者可以更好地应对...

    tomcat类加载器

    总结来说,Tomcat类加载器对于理解和调试多应用环境下的Java应用程序至关重要,而"DevLoader"可能是一种专为开发环境优化的类加载器,提供热部署等功能。对这个主题的深入理解有助于优化开发流程,提高生产力。

    java 类从哪个jar包加载的

    总之,Java类的加载涉及到类加载器、类路径以及Java的双亲委派模型,理解这些概念对于调试和优化Java应用的性能至关重要。在开发过程中,合理设置类路径,以及适当地利用类加载器的特性,可以帮助我们更好地管理和...

    Java类加载内幕.pdf

    Java的类加载器分为多个层次,包括引导类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader)。 引导类加载器是JVM启动时的第一个加载器,负责...

    动态编译、加载java类

    以上就是关于动态编译和加载Java类的一些核心知识点,这些技术大大提升了Java应用的灵活性和适应性,但同时也需要开发者对Java的类加载机制、安全性和性能有深入理解,才能有效地运用到实际项目中。

Global site tag (gtag.js) - Google Analytics