码迷,mamicode.com
首页 > 其他好文 > 详细

jvm学习-ClassLoader(二)

时间:2018-06-19 21:31:48      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:jdk   color   web   重要   home   IV   为什么   请求   font   

ClassLoader结构

技术分享图片

jdk加载的4个步骤

       CustomClassLoader 用户自定义的classLoader

       APPClassLoader主要加载classPath下面的class

       Extension ClassLoader 主要负责加载JAVA_HOME/jre/lib/ext/目下的所有jar

       BootStrap ClassLoader:负责加载JDK中的核心类库,如:rt.jar、resources.jar、charsets.jar等

java类加载器采用双亲委托模式

                 则是从下级往上级询问是否有加载。如果没加载 再从上级往下下级查找 如果找到就加载 没有找到就继续向下询问

                 比如 在程序创建一个Test类。然后在main方法打印这个这个Test类的classLoader 会打印 APPClassLoader

                          因为appClassLoader会逐个向上询问是否加载  则都没有加载  然后从上级bootstrap到Extension ClassLoader会在他的扫描的jar里面找有没有Test这个class都没有找到 最终APPClassLoader在classPath找到这个类  加载

                 我们改变一下程序 将Test类打包成一个jar 放到ext目录下

                       再次打印则会输出加载类是Extension ClassLoader

双亲委托模式的好处

             1. 防止重复加载

缺点 :

          上层类加载器无法获得下层类加载器加载的类

双亲委托模式是jdk的默认实现 但是不一定要完全按照这个模式

         比如tomcat webappClassLoader 就会先加载自己的class  找不到再委托父类

自定义ClassLoader 必须继承 classLoader类

   classLoader的重要方法

                    loadClass(String name)文件名字

             defineCalss(byte[] b int off,int lent) class文件的内容
        findClass() loadClass会掉findClass方法
        findLadedClass(String name) 如果加载了 则不加载 没加载 才加载
为什么要重写classLoader
     因为默认实现的几种classLoader只会加载特定路径下面的class     我们往往会根据需求加载别的路径下的class 比如网络请求的class二进制信息

jvm学习-ClassLoader(二)

标签:jdk   color   web   重要   home   IV   为什么   请求   font   

原文地址:https://www.cnblogs.com/LQBlog/p/9200926.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!