jvm第一节:类加载器

类加载器ClassLoader

作用:负责装入类。一个java程序运行,至少需要三个类加载器实例,负责加载不同类。

  1. BootstrapClassLoader是JVM内核内嵌加载器,主要负载加载JAVA_HOME/lib下的类库。
  2. ExtensionClassLoader,父类加载器是Bootstrap,主要加载JAVA_HOME/lib/ext目录中的类库。
  3. App ClassLoader是应用程序类加载器,负责加载应用程序classpath目录下的所有jar和class文件。它的父加载器为Ext ClassLoader。

#类的生命周期说明:第一阶段的加载由ClassLoader查找加载。
共7个步骤:加载->验证->准备->解析->初始化->使用->卸载
在这里插入图片描述

查看类对应的加载器

可以通过JDK-API查看:java.lang.class.getClassLoader();返回装载类的类加载器。但是如果该类的类加载器是BootstrapClassLoader,则返回null。

JVM如何知道我们的类在哪里

类不会重复加载

类的唯一性:类名一样且由同一个类加载器加载,代表是同一个类。

类的卸载

满足一下两个条件的类会被卸载:

  1. 该Class的所有实例都被GC回收;
  2. 加载该类的ClassLoader实例已经被GC回收;
    验证方式:可以在jvm启动中增加参数-verbose:class,输出类的加载和卸载日志信息。

双亲委派模型

并非真正的父子类关系,可以理解为逻辑上下级关系。
为了避免重复加载,加载类时由下向上逐步委托,由上而下逐级查找,因此类不会重复被加载,且安全。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值