类加载器及类加载过程

本文深入探讨Java类加载过程,包括加载、链接、初始化三个主要阶段。详细解析类加载器系统,如引导类加载器、扩展类加载器、系统类加载器及自定义类加载器的作用与区别。同时,阐述类加载机制对Java应用程序的影响。
摘要由CSDN通过智能技术生成

类加载器系统工作:

1、加载阶段(引导类加载器、扩展类加载器、系统类加载器)
2、链接阶段(验证、准备、链接)
3、 初始化
加载:

  • 通过一个类的全限定名获取此类的二进制字节流
  • 将二进制字节流中的代表静态存储结构的数据结构转化为方法区里面的运行时的数据结构
  • 在数据区里面生成一个代表这个类的Java.lang.Class对象,作为方法区的这个类的各种数据访问入口
    验证
  • 目的为了验证Class文件的字节流中包含的信息符合当前的虚拟机要求,确保正确性
  • 包括四种验证:文件格式验证、元数据验证、字节码验证、符号引用验证
    准备
  • 把类变量分配到内存中并对变量赋初值即0
  • 这里不包含用final修饰的static,因为常量在编译时就被初始化了
  • 这里不会为实例变量分配初始化,因为类变量会分配在方法区中,而实例变量会随着对象的创建一起分配在堆内存中
    解析
  • 将常量池中的符号引用转换为直接引用(指针)的过程
  • 在一个类实现中往往会用到许多别的类,此时需要引用
    初始化
  • 初始化阶段就是执行类构造器方法()的过程
  • 构造器方法不需要定义,时Javac编译器自动收集类中的所有类变量赋值动作和静态代码块中的语句合并而来
  • 构造器方法中指令按语句的源文件顺序执行
  • Java虚拟机保证子类的()执行前,父类的要执行完毕
  • ()在多线程状态下要被同步加锁。(保证只被加载一次,加载一次后的线程需要使用可以直接从方法区中调用)

从上到下四类加载器:引导类加载器、扩展类加载器、系统类加载器、自定义类加载器

引导类加载器

  • 专门用来加载核心类库用于提供Jvm自身需要的类,用C/C++语言实现的
  • 是扩展类加载器的父类加载器

扩展类加载器

  • Java语言编写
  • 派生于Class Loader类
  • 父亲加载器为启动加载器
  • 加载其指定目录下面的类库(java.ext.dirs指定的目录下或者jre/lib/ext目录下)

系统类加载器(应用程序类加载器)

  • Java语言编写
  • 派生于Class Loader
  • 父亲加载器为扩展类加载器
  • 负责加载环境变量或者环境变量指定下的类库
  • 是应用程序的默认加载器,Java用户自定义的类都由它加载

用户自定义类
作用:隔离加载类、修改类加载方式、扩展加载源、防止源码泄露、
流程:

  1. 继承Class Loader
  2. 自定义findClass方法体
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值