A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhanglei_ 初级黑马   /  2019-5-24 17:24  /  421 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

加载机制的原理:
加载过程:
1 加载:class文件实质上是的字节数组,来源有很多(文件、网络、服务器、jar包等等。。。)class文件经类加载器加载后,会将这些静态数据转换成方法区中的运行时二进制数据,同时在堆中生成一个代表这个类的java.lang.Class对象(反射对象),作为方法区中类数据的访问入口。
2 连接:

  • 验证:确保加载的类信息复合JVM的规范,没有安全方面的问题。
  • 准备:为类变量(静态变量)分配内存设置默认值,这些内存都将在方法区中进行分配
  • 解析:符号引用转化为直接引用(类加载完成之后,每个类都有一个常量池,常量池里存储了符号引用,解析的过程即是把这些符号指向具体的地址值)(在调用类中用final修饰的常量时,并不会执行类的初始化,直接从常量池里获取值,常量在编译阶段就存入到常量池中了)
3 初始化

  • 初始化阶段是执行类构造器<clinit>()方法的过程,类构造器<clinit>()方法是由编译器自动收集类的静态变量赋值动作和静态语句块中的语句合并产生的
  • 当初始化一个类时,若其父类还未初始化,则先初始化其父类
  • 虚拟机会保证一个类的<clinit>()方法在多线程环境只中被正确加载和同步
  • 当访问一个Java类的静态域时,只有     真正声明这个域的类才会被初始化

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马