Java类加载机制

背景

先来看Java类加载机制在整个Java运行过程中处于一个什么样的位置。

类加载机制处于整个程序阶段的中间部分

定义

由上图可见,我们编程的java文件在经过javac编译后变成了后缀为class的文件,而类加载机制,就是jvm将这些class文件转化为二进制流加载进JVM内存中并且生成该类型的Class对象,为后续程序运行提供资源的动作。

Java的类加载机制(Class Loading Mechanism)是指Java虚拟机(JVM)如何将类文件加载到内存中,并在运行时将其转换为能够执行的对象的过程。

步骤

1.加载

在加载阶段,JVM会根据类的包名和类名找到对应字节码文件,将其加载到内存中。加载方式主要有3种

从文件系统加载:从本地文件系统中读取.class文件。

从网络加载:通过网络从远程服务器加载.class文件。

从JAR包加载:从压缩的的JAR文件加载.class文件。

2.链接

链接阶段可以分为3个阶段:

验证:确保加载类的文件符合JVM规范,确保字节码的安全性和正确性。

准备:为类的静态变量分配内存,并将其初始化为默认值

解析:将类,接口,字段和方法的符号引用替换为直接引用。符号引用是指使用字符描述的对类,接口字段或方法的引用,而直接引用是指JVM在内存中指向实际内存地址的引用。

3.初始化

初始化阶段是类加载过程的最后一步。在这个阶段,JVM会根据程序的需要初始化静态变量,并执行静态初始化块。静态变量的初始化以及静态代码的执行顺序是按他们在类中出现的顺序进行的。只有在类被首次使用时,才会执行初始化过程。

类加载器

Java采用了双亲委派模型来管理类加载器。主要的类加载器有以下几种:

启动类加载器:负责加载JDK的核心类库
扩展类加载器:负责加载JRE的扩展目录中的类库
应用类加载器:负责加载用户类路径下的类库

双亲委派模型

当一个类加载器加载类时,它首先把加载请求委托给它的父类加载器,如果父类加载器无法加载该类,则它自己才会尝试加载。这种机制确保了Java核心库的安全和一致性。

缺点及解决办法

上面说的都是优点,但是这样的模型也有局限性,就是不够灵活,限制了插件机制;不够高效,会对性能进行限制。为了应对这些缺点,一些框架和应用采取了不同的类加载策略。例如,OSGi框架采用了一种模块化的类加载机制,不严格遵循双亲委派模型,而是允许模块间有选择性地共享类或资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值