JVM-类加载器

JVM-类加载器

尚硅谷学习视频
JVM组成图
JVM实现跨平台,运行字节码文件
一次编译导出运行,自动内存管理,不需要程序员手动进行内存管理
JVM与操作系统打交道,不和计算机硬件交互

1、类加载器

类加载器是负责将编译后的class文件加载,给执行引擎执行,临时存放的区域就是运行时内存区域
类加载器由4种组成

  1. 启动类加载器(Bootstrap ClassLoader)
    由C++语言编写,用于加载核心类库(JAVA_HOME/jre/lib),不继承ClaassLoader类
  2. 扩展类加载器(Extension ClassLoader)
    派生于ClassLoader类,加载jtr/lib/ext子目录下的内容
  3. 应用程序类加载器( AppClassLoader)
    Java语言编写,派生于classloader类,加载classpath的路径
    该类加载器是程序中默认的类加载
    可以通过ClassLoder.getSystemClassLoader()来获得加载器
  4. 用户自定义类加载器
    目的:修改类的加载方式,扩展加载源,防止源码泄露
    使用自定义加载器步骤:
    继承抽象类 java.lang.ClassLoader,在jdk1.2之前要重写loadClass()方法,jdk1.2之后只要写findClass()方法中

类加载器只负责加载,不管是否可以运行

2、类加载过程类加载过程
  • 加载
    通过类的全限制名来获得该类的二进制流
    在内存中生存一个java.lang.Class的对象,作为方法区这个类的各种数据的入口

  • 连接

    • 验证
      检测class文件是否符合jvm虚拟机规范(文件格式校验,元数据校验,字节码校验,符号引验证)

    • 准备
      为类变量分配内存空间并初始化为默认值
      不包括用final修饰的static变量,final变量的初始化会在编译阶段
      不初始化成员变量

    • 解析
      将常量池中的符号引用转换为直接引用

  • 初始化
    执行类构造器过程

  • 使用

  • 卸载

3、双亲委派模型

当一个类被加载的时候,自己先不去加载而是交给父类加载器。每一层都是如此,所以就会最终启动加载器加载,如果父类加载器不能加载,子类才会加载
好处:避免类的重复加载,避免核心类库被替换

判断是否是同一个类:

1.类的权限名要相同

2.加载该类的classloader必须相同
双亲委派模型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值