美文网首页
class文件与dex文件解析

class文件与dex文件解析

作者: 卡路fly | 来源:发表于2020-05-15 12:19 被阅读0次

    class文件

    能够被jvm识别,加载并执行的文件格式

    class文件生成

    1. 通过IDE自动build
    2. javac手动生成
      通过java命令执行

    class文件作用

    记录一个类文件的所有信息

    class文件结构

    • 一种8位字节的二进制流文件
    • 各个数据按顺序紧密排列,无间隙
    • 每个类或接口都单独占据一个class文件
    image.png
    字段 名称 数据类型 数量 描述
    magic 魔数 u4 1 class文件的标志,判断一个文件是不是class格式文件的标准
    minor_version 副版本号 u2 1
    major_version 主版本号 u2 1
    constant_pool_count 常量池大小 u2 1
    constant_pool 常量池 cp_info count_pool_count-1
    access_flag 访问标志 u2 1
    this_class 当前类索引 u2 1
    super_class 父类索引 u2 1
    interfaces_count 接口索引集合大小 u2 1
    interfaces 接口索引集合 u2 interfaces_count
    fields_count 字段索引集合大小 u2 1
    fields 字段索引集合 field_info field_count
    methods_count 方法索引集合大小 u2 1
    methods 方法索引集合 method_info method_count
    attributes_count 属性索引集合大小 u2 1
    attributes 属性索引集合 attribute_info attribute_count

    详情:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1857

    class文件弊端

    • 内存占用大,不适合移动端
    • 堆栈的加栈模式,加载速度慢
    • 文件IO操作多,类查找慢

    dex文件

    能够被DVM识别,加载并执行的文件格式

    生成方式

    1. 通过IDE自动build
    2. dx命令手动生成
    // 生成dex
    dx --dex --output Hello.dex Hello.class
    
    // adb push到手机
    adb push Hello.dex /storage/emulated/0
    
    // run起来
    dalvikvm -cp /sdcard/Hello.dex Hello
    

    作用

    记录整个工程中所有类文件的信息

    文件结构

    • 一种8位字节的二进制流文件
    • 各个数据按顺序紧密排列,无间隙
    • 整个应用中所有java源文件都放在一个dex中

    两者异同

    • 本质上class文件和dex文件一样,dex是从class文件演变而来的
    • class文件存在许多冗余信息,dex会除去冗余并整合
    • dex优点:通过一个dex文件存贮了所有java源代码,极大的减小了dex体积,更适合移动端

    相关文章

      网友评论

          本文标题:class文件与dex文件解析

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