zoukankan      html  css  js  c++  java
  • 8、类加载机制

    类加载机制

    一、类的生命周期 

    二、5种情况必须对类进行“初始化”

    1、new 对象

    2、反射的时候

    3、父类没有初始化的时候,需要先初始化父类

    4、Main入口,需要初始化这个类

    5、代理invoke时

    三、类加载全过程(加载-验证-准备-解析-初始化)

    加载:

      1、获取class文件的二进制流;

      2、根据class的格式化数据结构,在方法区生成运行时的数据结构;

      3、生成class对象,作为方法区的入口;

       

    验证:

      1、验证文件格式,如开头是否时CAFEBABE(这个魔头实在太好记了)

      

    准备:

      1、为statics 等字段在方法区分配空间,并设置初值。0 null 之类的;

     

    分配空间,并设置初值。0 null 之类的

    解析:

      1、解析继承class和interface

      2、解析字段feild

      3、类方法解析

      4、接口方法解析

    初始化:

      

    双亲委派模型:

      bootstrap ClassLoader:加载lib目录下面的class;

      EXT ClassLoader:扩展类加载器;加载lib/ext目录下面的class;

      APP ClassLoader:应用加载器,加载claapath目录下面的class;

    双亲委派模型要求每个类加载器都有个parent

     这样任意一个类都会由上而下确定唯一的加载器;从而确认唯一的类;

    双亲委派的弊端与破坏

    破坏一:历史原因,jdk1.0之前已经由类加载器,而双亲委派是在1.2以后出现的;

    破坏二:启动类需用应用到非基础类,而这些非基础类需要其他类加载器去加载;使用线程上下文线程去调用类加载器加载这些非基础类

    破坏三:由于用户对热更新,热部署的要求;

  • 相关阅读:
    Python-手动安装第三方包
    SQL SERVER-根据jobID查job
    python-包模块等概念
    锁表
    Python-try异常捕获
    胶水语言
    C++之多态性与虚函数
    android
    开源许可协议
    hal
  • 原文地址:https://www.cnblogs.com/yeyongjian/p/9253035.html
Copyright © 2011-2022 走看看