• 类加载机制过程


    java源代码编译过程

    https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html

    class file consists of a single ClassFile structure:

    以下就是后缀为class的文件的一个说明

    ClassFile {
        u4             magic;
        u2             minor_version;
        u2             major_version;
        u2             constant_pool_count;
        cp_info        constant_pool[constant_pool_count-1];
        u2             access_flags;
        u2             this_class;
        u2             super_class;
        u2             interfaces_count;
        u2             interfaces[interfaces_count];
        u2             fields_count;
        field_info     fields[fields_count];
        u2             methods_count;
        method_info    methods[methods_count];
        u2             attributes_count;
        attribute_info attributes[attributes_count];
    }

    java的源文件经过javac的编译以后就会编译为后缀为.class 16进制的文件。

    编译后的class文件:都是以cafa babe开头

    图解:

    类加载机制的过程

      在官方文档中我们就可以看出: Loading, Linking, and Initializing

     分别是:Loading(装载)、Linking(链接)、Initializing(初始化)

    • 装载

      查找class文件:Java面向对象(ClassLoader.loadclass,findclass)

      • 类的全限定路径名转换为二进制
      • 二进制流数据:类的描述信息的数据time/author。存储方法区
      • class<Person>对象,存储Person对象在堆中。java.lang.class
    • 链接
      • 验证:
        • 保证被加载类的正确性:元数据、文件、字节码
      • 为类的静态资源分配内存空间,初始化默认值

      

      • 解析:把类的符号引用转换为直接引用
        • 符号引用:class文件中定义的那些内容
        • 直接引用:java进程中的一些具体的真实地址、指针、句柄
    • 初始化:对类 的静态变量初始化

  • 相关阅读:
    Python开发【第六篇】循环语句
    Python开发【第四篇】语句与函数
    Python开发【第三篇】数据类型
    Python开发【第二篇】:初始Python
    2019-10-11入博客第一篇文章
    设计模式——命令模式
    设计模式——职责链模式
    设计模式——单例模式
    设计模式——原型模式
    设计模式——建造者模式
  • 原文地址:https://www.cnblogs.com/LBJLAKERS/p/12273967.html
Copyright © 2020-2023  润新知