java类加载器学习总结

java类加载器学习总结

ID:35294602

大小:161.00 KB

页数:12页

时间:2019-03-23

java类加载器学习总结_第1页
java类加载器学习总结_第2页
java类加载器学习总结_第3页
java类加载器学习总结_第4页
java类加载器学习总结_第5页
资源描述:

《java类加载器学习总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、加载器概念类加载器(classloader)用来加载Java类到Java虚拟机中。一般来说,Java虚拟机使用Java类的方式如下:Java源程序(.java文件)在经过Java编译器编译之后就被转换成Java字节代码(.class文件)。类加载器负责读取Java字节代码,并转换成java.lang.Class类的一个实例。每个这样的实例用来表示一个Java类。通过此实例的newInstance()方法就可以创建出该类的一个对象。类加载器分类JDK默认提供了如下几种ClassLoader:1、BootstrpClassLoaderBootstrp加载器是用C++语言写的

2、,它是在Java虚拟机启动后初始化的,它主要负责加载%JAVA_HOME%/jre/lib或者-Xbootclasspath参数指定的路径以及%JAVA_HOME%/jre/classes中的类,虚拟机出于安全等因素考虑,不会加载%JAVA_HOME%/jre/lib路径下存在的陌生类,开发者通过将要加载的非JDK自身的类放置到此目录下期待启动类加载器加载是不可能的。2、ExtClassLoaderBootstrpclassloader加载ExtClassLoader,并且将ExtClassLoader的父加载器设置为Bootstrploader。ExtClassLoa

3、der是用Java写的,具体来说就是sun.misc.Launcher$ExtClassLoader,ExtClassLoader主要加载%JAVA_HOME%/jre/lib/ext,此路径下的所有classes目录以及java.ext.dirs系统变量指定的路径中类库。3、AppClassLoaderBootstrpclassloader加载完ExtClassLoader后,就会加载AppClassLoader,并且将AppClassLoader的父加载器指定为ExtClassLoader。AppClassLoader也是用Java写成的,它的实现类是sun.mis

4、c.Launcher$AppClassLoader,另外我们知道ClassLoader中有个getSystemClassLoader方法,此方法返回的正是AppclassLoader。AppClassLoader主要负责加载classpath所指定的位置的类或者是jar文档,它也是Java程序默认的类加载器。综上所述,它们之间的关系可以通过下图形象的描述:双亲委托模型Java中ClassLoader的加载采用了双亲委托机制,采用双亲委托机制加载类的时候采用如下的几个步骤:1当前ClassLoader首先从自己已经加载的类中查询是否此类已经加载,如果已经加载则直接返回原来

5、已经加载的类。每个类加载器都有自己的加载缓存,当一个类被加载了以后就会放入缓存,等下次加载时可以直接返回。2当前classLoader的缓存中没有找到被加载的类时,委托父类加载器去加载,父类加载器采用同样的策略,首先查看自己的缓存,然后委托父类的父类去加载,一直到bootstrpClassLoader。3当所有的父类加载器都没有加载的时候,再由当前的类加载器加载,并将其放入它自己的缓存中,以便下次有加载请求的时候直接返回。线程上下文类加载器ContextClassLoader是java.lang.Thread类的一个属性,Thread类中的方法getContextCla

6、ssLoader()和setContextClassLoader(ClassLoadercl)用来获取和设置线程的上下文类加载器。如果没有通过setContextClassLoader(ClassLoadercl)方法进行设置的话,线程将继承其父线程的上下文类加载器。Java应用运行的初始线程的上下文类加载器是系统类加载器(AppClassLoader),在线程中运行的代码可以通过此类加载器来加载类和资源。双亲委托模型并不能解决Java应用开发中会遇到的类加载器的全部问题。Java提供了很多服务提供者接口(ServiceProviderInterface,SPI),允许

7、第三方为这些接口提供实现。常见的SPI有JDBC、JCE、JNDI、JAXP和JBI等。这些SPI的接口由Java核心库来提供,如JAXP的SPI接口定义包含在javax.xml.parsers包中(rt.jar)。这些SPI的实现代码很可能是作为Java应用所依赖的jar包被包含进来,可以通过类路径(CLASSPATH)来找到,如实现了JAXPSPI的ApacheXerces所包含的jar包。SPI接口中的代码经常需要加载具体的实现类。如JAXP中的javax.xml.parsers.DocumentBuilderFactory类中的n

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。