JDK的是如何加载类的?TOMCAT的类加载顺序?

解决方案 »

  1.   

    1.JDK有多个类加载器,Boot类加载器,Ext类加载器,App类加载器,Boot类加载器负责加载java基础类库jdk\jre\lib\和jdk\jre\classes\里面的类,Ext负责加载jdk\jre\lib\ext\下面的类,App负责加载classpath下面的类。
    2.类加载器使用双亲委托机制来加载类。
    3.tomcat有自己的类加载器,加载类的道理是一样的。
      

  2.   

    自己顶一下。我感觉是在问classloader
    看看还有没有具体些的答案
      

  3.   

    Tomcat 的class加载的优先顺序一览 
    1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。 
    2.环境变量CLASSPATH中的jar和class文件。 
    3.$CATALINA_HOME/common/classes下的class文件。 
    4.$CATALINA_HOME/commons/endorsed下的jar文件。 
    5.$CATALINA_HOME/commons/i18n下的jar文件。 
    6.$CATALINA_HOME/common/lib 下的jar文件。 
    (JDBC驱动之类的jar文件可以放在这里,这样就可以避免在server.xml配置好数据源却出现找不到JDBC Driver的情况。) 
    7.$CATALINA_HOME/server/classes下的class文件。 
    8.$CATALINA_HOME/server/lib/下的jar文件。 
    9.$CATALINA_BASE/shared/classes 下的class文件。 
    10.$CATALINA_BASE/shared/lib下的jar文件。 
    11.各自具体的webapp /WEB-INF/classes下的class文件。 
    12.各自具体的webapp /WEB-INF/lib下的jar文件。 
      

  4.   

    另外还有一点,jdk加载优先于tomcat
      

  5.   

    1.执行java xxx.class 2.找到本机安装的JRE 3.找到jvm.dll(这个jvm.dll是client目录下的呢还是server目录下的呢,两者有什么不同?) 4.启动JVM并进行初始化。 5.产生Bootstrp Loader (加载\jre\lib目录下的rt.jar charsets.jar) 6.载入ExtClassLoader(加载\ext\目录下的jar文件) 7.载入AppClassLoader(加载自己的.class) 
    tomcat的类加载机制 这里采用tomcat6的类加载机制,以下是网上摘取的资料 
    Tomcat6 类装载器的实现都是通过继承于JDK中的 java.lang.ClassLoader类。 
        包括Bootstrap,System,Common和Webapp这四种类加载器来实现不同目录的类文件装载。     示例结构如下: 
          Bootstrap 
              | 
          System 
              | 
          Common 
          /    \ 
      Webapp1  Webapp2 ...     * Bootstrap classes of your JVM 
        * System class loader classses (described above) 
        * /WEB-INF/classes of your web application 
        * /WEB-INF/lib/*.jar of your web application 
        * $CATALINA_HOME/lib 
        * $CATALINA_HOME/lib/*.jar