专栏首页Reck ZhangJava 15 - 类加载过程

Java 15 - 类加载过程

类加载过程

类的加载过程包括加载, 验证, 准备, 解析, 初始化五个阶段.

加载

加载过程实现三个事:

  1. 通过类的全限定名来获取定义此类的二进制字节流.
  2. 将这个字节流所代表的静态存储结构转化为方法区的运行时存储结构.
  3. 在内存中生成一个代表这个类的Class对象, 作为方法区的这个类的各种数据的入口. 二进制的获取方法:
  4. 从ZIP包中获取, 这是JAR, EAR, WAR格式的基础.
  5. 从网络中获取, 如Applet.
  6. 运算时计算生成, 运用最多的就是动态代理技术.
  7. 由其他文件生成, 如JSP.
  8. 从数据库中读取.

验证

确保Class文件的字节流中包含的信息符合虚拟机的要求, 并且不会危害虚拟机的安全.

  1. 文件格式验证: 验证字节流是否符合Class文件格式规范, 并能被虚拟机处理.
  2. 元数据验证: 对字节码进行语义分析, 确保符合Java规范要求.
  3. 字节码验证: 对数据流和控制流分析, 确保程序语义是合法的, 符合逻辑的.
  4. 符号引用验证: 对类自身以外(常量池中的各种符号引用)的信息进行校验.

准备

准备阶段为类变量分配内存并设置初始值, 使用的是方法区的内存.

注意的是, 初始值一般为0, 下面的value就被初始化为0而不是123.

public static int value = 123;

如果类变量是常量, 那么会按照表达式赋值, 而不是赋值为0.

public static final int value = 123;

解析

将常量池的符号引用替换为直接引用.

初始化

初始化阶段执行类构造器()方法.

在准备阶段, 类变量已经赋过一次初始值了, 而在初始化阶段, 根据程序制定的去初始化类变量和其他资源.

()有一下特点:

  1. 此方法由编译器自动收集类中所有类变量的赋值动作和静态语句块中的语句合并产生. 静态语句块只能访问到定义在它之前的类变量, 定义在它之后的只能赋值, 不能访问. 否则会提示”非法向前引进”.
  2. 此方法不需要显式调用父类构造器.
  3. 如果一个类中不包含类变量的赋值操作, 也不包含静态语句块, 那么编译器可以不为该类生成()方法.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java类加载过程

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17881581

    bear_fish
  • Java类加载基本过程

    数组类本身不通过类加载器创建,由java虚拟机直接创建,数组类的元素类型由类加载器加载。

    WindWant
  • Java 类机制(2)---- 类加载过程

    大家好,在该专栏的上一篇文章中我们介绍了一下关于 Java 中类的相关知识点。那么这篇文章我们来看一下一个 Java 类是怎么被虚拟机加载并使用的,本文内容参考...

    指点
  • java类的加载过程和类加载器的分析

    我们知道,我们写的java代码保存的格式是 .java, java文件被编译后会转换为字节码,字节码可以在任何平台通过java虚拟机来运行,这也是java能够跨...

    矿泉水
  • java类的加载过程和类加载器的分析

    我们知道,我们写的java代码保存的格式是 .java, java文件被编译后会转换为字节码,字节码可以在任何平台通过java虚拟机来运行,这也是java能够跨...

    用户2141593
  • Java虚拟机--类加载过程

    SuperHeroes
  • Java类加载到类使用全过程

    上篇我们说到为了减少Activity类加载的过程,所以可以预创建Activity。

    码上积木
  • 类加载过程

    Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢?

    Vincent-yuan
  • JAVA JVM类加载过程的学习

    学习资料链接:https://www.bilibili.com/video/av30023103/

    逆回十六夜
  • JVM - 类加载过程

    当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。

    用户2987604
  • JVM:类加载过程

    Java天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。

    HLee
  • jvm的类加载过程

    JVM将类的加载过程分为三个步骤:装载(Load)、链接(Link)和初始化(Initialize)

    是小张啊喂
  • Java虚拟机详解(十)------类加载过程

      在上一篇文章中,我们详细的介绍了Java类文件结构,那么这些Class文件是如何被加载到内存,由虚拟机来直接使用的呢?这就是本篇博客将要介绍的——类加载过程...

    IT可乐
  • Java类加载-加载

    我们已经将整个Class的构成讲述完了,不清楚的同学可以看一下关于Class文件的介绍,但是空有Class并没有什么用,在Class中的各种描述信息都需要被加载...

    shysh95
  • VM的类加载的过程是通过引导类加载器

    JVM的类加载的过程是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由JVM的具...

    不会飞的小鸟
  • jvm的类加载器(classloader)及类的加载过程

    类加载简单的说就是JVM通过类加载器ClassLoader,把.class文件中的信息,拼装成Class对象放入内存中。

    逍遥壮士
  • Java ClassLoader加载class过程

    关于class loader有太多太多的文章和图来讲过程。我就不多说了。以下是我认为的一些要点。

    小金狗子
  • Java类加载及对象创建过程详解

    验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害。如果验证失败,就会抛出一个java.lang.VerifyError异常...

    全菜工程师小辉
  • JVM中类加载的过程

      前面看了类加载的时机,本文来记录下类加载的过程,也就是加载的每个阶段都做了哪些事情

    用户4919348

扫码关注云+社区

领取腾讯云代金券