美文网首页
类加载过程

类加载过程

作者: ONE_PIECES | 来源:发表于2019-04-23 14:37 被阅读0次
1.1 类的加载过程

当程序需要使用某个类的时候,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化三个步骤来实现对类的初始化。

  1. 加载,就是讲class文件读入到内存,病为之创建一个Class对象(字节码文件对象)
  2. 连接,验证确保被加载类的正确性,准备为类静态成员分配内存,并设置初始值,解析,将类中的符号引用替换为直接引用
  3. 初始化(执行client方法,该方法收集了类变量的赋值操作和静态代码块)
    注:
    1. 初始化阶段是执行类构造器< clinit >()方法的过程。< clinit >()方法是由编译器自动收集类中的所有类变量(也叫静态变量)的赋值动作****和静态语句块static{}*中的语句合并产生的。
    2. 编译器收集的顺序是由语句在源文件中出现的顺序所决定的
    3. init是对象构造器方法,也就是说在程序执行 new 一个对象调用该对象类的 constructor 方法时才会执行init方法,而clinit是类构造器方法,也就是在jvm进行类加载—–验证—-解析—–初始化,中的初始化阶段jvm会调用clinit方法。
    4. init是instance实例构造器,对非静态变量解析初始化

1.2 加载时机

  1. 创建类的实例
  2. 访问类的静态变量
  3. 调用类的静态方法
  4. 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
  5. 创建某个类的子类,子类父类都加载
静态代码块

java允许多个静态初始化的动作组织成一个特殊的“静态子句”(静态块),仅执行一次,当首次生成这个类的一个对象时,或者首次访问属于这个类的惊天数据成员时候

构造代码块

构造代码块。在构造器之前执行(能够保证无论调用按个显式构造器,某些操作都会发生。)

1.3 类加载器

  • 负责将.class文件加载到内存中,病为之生成对应的Class对象(对应类的加载阶段)
  • 主要分为
    1. Bootstrap ClassLoader根 类加载器 ,也称为引导类加载器,负责Java核心类的加载,如Sting
    2. Extension ClassLoader 扩展类加载器,负责JRE的扩展目录中的Jar包的加载
    3. System ClassLoader 系统类加载器,负责在JVM启动时加载来自java命令的class文件

相关文章

  • 第一章 类加载过程

    要点 类加载过程 类加载器 一、类加载过程 1.类的加载过程 类的加载 .class文件过程分为:加载---->连...

  • JVM总括四-类加载过程、双亲委派模型、对象实例化过程

    JVM总括四-类加载过程、双亲委派模型、对象实例化过程 目录:JVM总括:目录 一、 类加载过程 类加载过程就是将...

  • 2019年JVM面试都问了什么?快看看这22道面试题!(附答案解

    一. Java 类加载过程? Java 类加载需要经历一下 7 个过程: 1. 加载 加载是类加载的第一个过程,在...

  • 面经题目学习

    java类加载过程类加载过程:加载、验证、准备、解析、初始化。类加载过程中主要是将Class文件(类的二进制字节流...

  • jvm相关面试题

    类加载的过程 classLoader.loadClass的类加载过程有如下几步:加载 >> 验证 >> 准备 >>...

  • 类加载过程--加载

    类从加载到虚拟机内存中开始,到卸载出内存为止的步骤如下:http://www.jianshu.com/p/66ec...

  • JVM-类加载器

    类加载器 类加载器是用来把类加载到JAVA虚拟机中。 类加载的过程 类的加载过程采用了父亲委托的机制,这种机制能更...

  • 01-类加载过程

    类加载过程 类加载可以分为加载、连接、初始化3个部分 加载 加载过程是指查找并加载类的二进制数据,加载class文...

  • jvm(二)类加载过程与类加载器

    本篇内容: 类加载过程 类加载器分类 双亲委托机制 沙箱安全机制 类加载过程 类加载器子系统负责将从文件系统或者网...

  • Java类加载问题

    类加载过程类加载过程:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。一个非数组类的加载阶段(...

网友评论

      本文标题:类加载过程

      本文链接:https://www.haomeiwen.com/subject/osuvgqtx.html