码迷,mamicode.com
首页 > 其他好文 > 详细

类加载机制过程

时间:2020-02-08 12:10:42      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:图解   acl   loader   img   静态   ons   find   ora   过程   

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

技术图片

 

类加载机制过程

标签:图解   acl   loader   img   静态   ons   find   ora   过程   

原文地址:https://www.cnblogs.com/LBJLAKERS/p/12273967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!