java类加载机制

JDK类加载器可以大致分为三类,分别是启动类加载器,扩展类加载器,以及应用程序加载器。类加载器就是根据指定全限定名称将class文件加载到JVM内存,转为Class对象。这是jdk为我们提供的几种类加载器。这三者加载类的路径分别为如下:

               (Bootstrap ClassLoader) 启动类加载器:JAVA_HOME/lib目录下,以及被-Xbootcalsspath参数设定的路径,不过启动类加载器加载的类是有限制的,如果JVM不认识的话,就算放在这些目录下也没用。由C++语言实现(针对HotSpot)。启动类加载器无法被Java程序直接引用。

其他类型:开发者可以直接使用由Java语言实现,继承自抽象类ClassLoader:

                (Extension ClassLoader )扩展类加载器:JAVA_HOME/lib/ext目录下,以及被java.ext.dirs系统变量指定的路径。sun.misc.Launcher.ExtClassLoader类实现功能

                (ApplicationClassLoader).应用程序类加载器:用户自己的类路径(classpath),这个类加载器就是我们经常使用的系统类加载器,并且JDK中的抽象类ClassLoader的默认父类加载器就是它。

自定义类加载起需要继承ClassLoader类重写findClass()方法。jdk的类加载器采用的双亲委派模型保证了类加载过程的安全可靠。jvm对某一对象是否为同一对象的判断包含了是否由同一类加载器加载。

日常项目中的各类web容器大多自己实现了一套类加载的机制,典型的例如Tomcat,突破了双亲委派机制的限制。

当tomcat中部署多个应用时,放置jar包的一些规则:

在Tomcat目录结构中,有3组目录(“/common/*”、“/server/*”和“/shared/*”)可以存放Java类库,另外还可以加上Web应用程序自身的目录“/WEB-INF/*”,一共4组,把Java类库放置在这些目录中的含义分别如下:

      1放置在/common目录中:类库可被Tomcat和所有的Web应用程序共同使用。

      2放置在/server目录中:类库可被Tomcat使用,对所有的Web应用程序都不可见。

      3放置在/shared目录中:类库可被所有的Web应用程序共同使用,但对Tomcat自己不可见。

      4放置在/WebApp/WEB-INF目录中:类库仅仅可以被此Web应用程序使用,对Tomcat和其他Web应用程序都不可见。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值