zoukankan      html  css  js  c++  java
  • 类加载机制过程

    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进程中的一些具体的真实地址、指针、句柄
    • 初始化:对类 的静态变量初始化

  • 相关阅读:
    【漏洞分析】5次shift漏洞破解win7密码
    skyler实战渗透笔记(五)—Tr0ll
    skyler实战渗透笔记(四)—Raven2
    skyler实战渗透笔记(三)—Raven
    python读写excel文件
    python_列表
    mysql安装教程
    centos7安装RabbitMQ教程
    centos7安装mongodb4.2.15教程
    tomcat9安装教程
  • 原文地址:https://www.cnblogs.com/LBJLAKERS/p/12273967.html
Copyright © 2011-2022 走看看