java类加载

执行代码的大体流程如下

1.开始执行代码
2.java.exe调用底层的jvm.dll文件创建java虚拟机,这一步是C++来实现的
3.创建一个引导类加载器实例,这个加载类实例是C++来创建的
4.C++调用java代码创建JVM启动器Launcher,此类由引导类加载器加载,使用Launcher来创建其它的类加载器
5.获取运行类自己的加载器,如果是我们自己写的类一般是AppClassLoader
6.加载器调用loadClass方法,加载要运行的类
7.加载完成后,jvm会调用main方法
8.C++发起调用

加载类的过程有以下几个步骤

1.加载:通过io流读入字节码文件,在使用到类的时候才进行加载,比如调用 new main方法等,在加载阶段都会生成代表这个类的Class对象,放到方法区,作为这个类各种数据访问的入口
2.验证:校验字节码文件的正确性
3.准备:给类的静态变量分配内存,并赋默认值
4.解析:将符号引用替换为直接引用,只作用在静态方法上,也就是静态链接过程。动态链接,是程序运行期间符号引用替换为直接引用
5.初始化:将静态变量初始化为指定的值,执行静态读代码块

当类被加载到方法区后,包含:运行时常量池、类型信息、字段信息、方法信息、类加载器的引用、对应class实例的引用等
类加载器的引用:这个类到类加载器的引用。
对应class实例的引用:类加载器在加载类信息放到方法区后,会创建一个对应的Class类型的对象实例放到堆中,作为开发人员访问方法区中类定义的入口和切入点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤独地卜师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值