jvm整体运行:

    1. 将.java文件编译成.class字节码文件
    2. 类加载器把.class字节码文件中的类加载到JVM中
    3. JVM执行类中写好的代码

    jvm类加载机制

    1. jvm会在用到这个类的情况下加载该类
    2. 类加载经历加载->验证->准备->解析->初始化->使用->卸载->

      加载:用到该类的时候从字节码文件中加载对应的类
      验证,准备,解析:验证是否符合指定规范,准备就是给类变量分配内存空间,解析是把符号引用替换为直接引用过程。
      初始化:核心阶段. 一是给变量赋值,二是执行new之类的操作,初始化类,如果父类未初始化,再初始化父类。
      image.png

    3. 类加载器和双亲委派机制。

      有四种类加载器:
      ① 启动类加载器(Bootstrap classLoader):核心类加载器,加载java安装目录下的lib文件下的类库
      ② 扩展类加载器(Extension ClassLoader): 加载java目录下的lib/ext目录的类
      ③ 应用程序类加载器(Application ClassLoader):加载classPath环境变量指定路径类,可以理解为去加载写好的代码。
      ④ 自定义类加载器:自定义类加载器,根据需求去加载类
      双亲委派机制:
      image.png
      如果应用程序需要加载一个类,先委派给自己的父类去加载,最终找到定长的类加载器,如果父类加载器在自己的范围内未找到该类,就推给子加载器去加载,依次类推。