深入了解java虚拟机---类加载机制----加载

本文详细解析了Java类加载过程,包括通过类的全限定名获取二进制流的方法,如从zip、jar包获取、网络获取、动态代理生成等。同时介绍了加载非数组类与数组类的区别,以及加载完成后二进制字节流如何存储在方法区并生成java.lang.Class对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

加载是类加载的一个阶段。不要弄混淆了

这一阶段主要做了下面三件事。
1.通过一个类的全限定名获取此类的二进制流

2.将这个二进制流代表的静态存储结构转化为方法区的运行时数据结构

3.在内存中生成java.lang.Class对象,作为访问入口

 

.通过一个类的全限定名获取此类的二进制流:这一步说的不明确,要怎样获取呢。java虚拟机没有指明。所以就产生了很多种获取方法

1.从zip,jar,war包获取

2.从网络中获取

3.运行时生成,如动态代理

4.有其他文件生成 如jsp

5.从数据库中获取,这我还没理解。先放着吧

 

加载分为加载非数组类和数组类:

加载非数组类,可以使用系统的类加载器,也可以自定义类加载器(即重写loadClass()方法)

 

加载数组类,数组的组件类型时引用类的采用递归加载这个组件类型。数组在该类的类加载器的类名称空间上被标识

数组的组件类型不是引用类(如int[]),那么数组就与引导类加载器关联

顺便一提

数组类的可见性和组件类型可见性一致,组件类型不是引用类型就直接默认为public

 

加载完成后,二进制字节流存储在方法区中,然后堆中生成Java.lang.Class对象。

最后说下加载和连接部分内容是交叉进行的,但是加载还是在连接前面

转载于:https://www.cnblogs.com/dailinfu/p/7296145.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值