类加载的机制可以分为如下几步:

1、加载:将class字节文件码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口。

2、链接:将Java类的二进制代码合并到JVM的运行状态之中的过程

(1)验证:确保加载的类信息符合JVM 规范,没有安全方面的问题。

(2)准备:正式为类变量(static变量分配内存并设置类变量初始值的阶段,这些内存都将在方法区中进行匹配)

(3)解析:虚拟机常量池内的符号引用替换为直接引用的过程

3、初始化:初始化阶段是执行类构造器方法的过程。类构造器方法是由编译期自动收集类中的所有类变量的复制动作和静态语句块中的语句合并产生的。当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先初始化其父类的初始化,虚拟机会保证一个类的构造器方法在多线程环境中被正确加锁和同步。当访问一个Java类的静态域时,只有真正声明这个静态变量的类才会被初始化。

4、使用

5、卸载

主动引用和被动引用

主动引用的条件有:

1、创建类的实例(new)

2、访问类的静态变量(除常量)和静态方法

3、反射(Reflect)

4、当初始化一个类时,如果发现父类没有初始化,就先初始化父类

5、虚拟机启动时,含main()方法的类先初始化

被动引用的条件有:

1、当访问一个静态变量时,只有声明这个静态变量的类才会初始化(子类如果引用父类的静态变量,子类不会初始化)

2、通过数组定义来引用类,不会触发类的初始化

3、引用常量不会初始化类(常量在编译阶段就存入调用类的常量池中了)

java类加载 复制_Java 类加载全过程相关推荐

  1. java引导类加载器_Java类加载器层次结构(一)

    类加载器有一种父/子关系.除了引导类加载器外,每个类加载器都有一个父类加载器.本章通过分析ClassLoader的源码来展示java类加载器的层次结构. 根据规定,类加载器会为它的父类加载器提供一个机 ...

  2. java字节流复制_Java使用字节流复制文件的方法

    其实用java程序复制文件并不难,具体内容如下 import java.io.FileInputStream; import java.io.FileOutputStream; import java ...

  3. java 字符串 复制_Java字符串复制

    java 字符串 复制 Sometime back I was asked how to copy a String in java. As we know that String is an imm ...

  4. java类加载器_JAVA类加载器

    虚拟机设计团队把加载动作放到 JVM 外部实现,以便让应用程序决定如何获取所需的类,JVM 提 供了 3 种类加载器: 1. 启动类加载器(Bootstrap ClassLoader) 负责加载 JA ...

  5. 类java的步骤_java类加载的过程

    类加载就是三个过程:加载.链接.初始化 链接又可以分为验证.准备.解析 1.加载 将class字节码文件通过类加载器装入内存中 2.验证 确保当前class文件的字节流所包含的内容符合当前JVM的规范 ...

  6. java 类加载器_Java 类加载器

    一.概述 类加载器通过一个类的全限定名来获取描述此类的二进制字节流. 类加载器在类层次划分.OSGi.热部署.代码加密等领域发挥着重要的作用. 比较两个类是否"相等",只有在这两个 ...

  7. java getinstance 反射_JAVA类加载和反射介绍

    简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息. 反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性, ...

  8. java file 初始化_java类加载和对象初始化

    对象初始化过程: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 3.其次,初始化父 ...

  9. js java 反射机制_java 类加载机制和反射机制

    一.类的加载机制 jvm把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成jvm可以直接使用的java类型的过程. (1)加载 将class文件字节码内容加载到内存中,并将这些静态数 ...

最新文章

  1. To be a true man
  2. ubuntu下配置eclipse3.3
  3. 【深入Cocos2d-x】探索Cocos2d-x中的内存管理-引用计数和自动释放池
  4. SAP Spartacus CMSFlexComponent
  5. 对于‘敲什么都队’自主开发的《校园服务》软件的使用体验
  6. 几行代码搞定Flash应用的多语言实时切换问题
  7. 春运能不能抢到票就看他了!开源的Python抢票神器
  8. GitHub 标星 1.6w+,前方宝藏项目出没!| 原力计划
  9. python main调试_在main.py中调试显示这个是什么问题
  10. ENSP静态路由配置
  11. 游戏测试一工作原理及测试流程
  12. 考贵大计算机专业研究生,贵州大学(专业学位)计算机技术考研难吗
  13. Java并发编程:并发和并行
  14. 初学Java常用设计模式之——原型模式
  15. 一文带你了解UI自动化测试框架
  16. #define宏的妙用!实现你以为的函数offsetof等
  17. 【陈曲写作】考研英语写作
  18. Amazon EC2免费一年申请使用图文教程
  19. Hibernate 入门 练习
  20. 程序员风格的修真小说

热门文章

  1. linux定义LD_library,linux – CentOS /usr/local / lib系统范围内$LD_LIBRARY_PATH?
  2. linux下文件夹函数,如何从linux上的文件夹中找到一个函数
  3. 王者荣耀装备测试软件,王者荣耀首度公开5v5 PVP自动化测试方案
  4. java 注解报错_java注解验证接收参数 返回注解字段的错误
  5. 鸿蒙能够替代安卓吗,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪
  6. 使用Keras计算余弦相似度(Cosine Similarity)
  7. CNN在文本分类的应用(内有代码实现) 论文Convolutional Neural Networks for Sentence Classification
  8. mysql约束日期_MySQL的约束、事务、字符串、日期、数学相关及其他补充
  9. slb健康检查方式_SLB健康检查也是“正常”-问答-阿里云开发者社区-阿里云
  10. 人脸检测--Face Detection with End-to-End Integration of a ConvNet and a 3D Model