A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沉湎码海 中级黑马   /  2017-2-18 07:40  /  612 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

深入Java虚拟机-类装载器-讲06


.class 装载验证流程

.什么是类装载器ClassLoader

。JDK中ClassLoader默认设计模式

.打破常规模式

.热替换






1.class文件的装载验证流程

        加载---> 链接---> 初始化
       
       

        1.加载
       
        2.链接
                - 验证
                -准备
                -解析
               
       
        3.初始化
       
       

       
加载的概述: 加载是第一个阶段,它会才从class文件中,读取类的二进制流,然后转到方法区中
                          生成相应的数据结构,最后在Java堆中生成对应的java.lang.Class对象。
                          
                          

链接  :
          - 验证
                -准备
                        :
                         分配内存,并为类设置初始值(方法区中)
                         对于static final 类型,在准备阶段就会别赋上正确的类型。
                         
                         
                -解析:
                        链接的第三步是解析:就是将符号引用解析为直接引用
                        符号引用就是一个字符串,用以表示某一个类的名称,如:java.lang.Object
                        (
                                符号引用,字符串,引用对象不一定被加载。
                                直接引用,指针或者地址偏移量,引用对象一定在内存。
                               
                               
                        )
                       

    -初始化时期:
                执行类构造器,如静态变量赋值语句,static{}语句
                子类的类初始化调用前保证父类的类初始化被调用。
               
           初始化是线程安全的。
          
          
2.什么是类装载器ClassLoader  ???
                :
                它只负责把class文件读进来。
               
               
               
                        .ClassLoader 是一个抽象类
                        .ClassLoader的实例将读入Java字节码将类装载到JVM中。
                       
                        .ClassLoader可以定制,满足不同的字节码流获取方式
                       
                        .ClassLoader负责类装载过程中的加载阶段。
                       
                       
       
JDK中ClassLoader默认设计模式:

        -public  Class<?> loadClass(String name) throws  ClassNotFoundException
                .载入并返回一个class
               
        -protected  final Class<?> defineClass(byte[] b,int off,int len);
                .定义一个类,不公开调用
               
        -protected  Class<?> findClass(String name) throws ClassNotFoundException
                .loadClass回调该方法,自定义ClassLoader的推荐做法。
               
        -protected  final  Class<?> findLoaded(String name)
            .寻找已经加载的类。
               

               
               
3.
       
3.


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马