JVM-类加载器

主要分为4大步:

加载
链接
初始化
使用
卸载

链接又分为3小步:

验证
准备
解析

类加载器:

  1. BootstrapClassLoader(启动类加载器)
    最顶层的加载类,由C++实现,通常表示为 null,并且没有父级,用来加载JDK核心类库,( %JAVA_HOME%/lib目录下的 jar 包和类)以及被 -Xbootclasspath参数指定的路径下的所有类。
    
  2. 扩展类加载器
    主要负责加载 %JRE_HOME%/lib/ext 目录下的 jar 包和类以及被 java.ext.dirs 系统变量所指定的路径下的所有类
    
  3. 应用类加载器
    负责加载当前应用 classpath 下的所有 jar 包和类
    

类加载机制:双亲委派模型

jvm启动时不会一次性加载全部类,大部分类都是在使用时触发加载,那如何知道当前类是否已经加载过呢?根据双亲委派模型来实现,当需要加载一个类时,首先会由父类加载器中加载(及父类的父类),当父类加载器无法加载时,则调用findClass方法来加载该类;

ps:为了打破双亲委派模型,可以自定义类加载器(继承ClassLoader,重写loadClass()),【tomcat的应用间类隔离原理】

你可能感兴趣的:(基础,jvm,java)