class文件和dex文件「建议收藏」

class文件和dex文件「建议收藏」Class文件1、什么是class文件能够被JVM识别,加载并执行的文件格式。2、class文件的生成![这里写图片描述](https://img-blog.csdn.net/20180817160829200?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RldmVsb3BBbmRyb2lk/font/5a6L5L2T/f…

大家好,又见面了,我是你们的朋友全栈君。

Class文件

1、什么是class文件

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

2、class文件的生成

这里写图片描述

3、如何生成一个class文件(必须配置好java环境变量)

    通过IDE自定帮我们build
    手动通过javac去生成class文件
    通过java命令去生成class文件

这里写图片描述

4、class文件作用

    记录一个类文件的所有信息,记住所有。例如记住了当前类的引用this、父类super等等。class文件记录的信息往往比java文件多。

5、class文件的结构

    8位字节的二进制流文件
    各个数据紧密排列,无间隙,减少了文件体积,加快加载速度
    每个类或者接口单独占据一个class文件,每个类单独管理,没有交叉

使用010Editor可以查看class文件的详细信息(注意需要安装模板):
这里写图片描述
class文件中的字段如下所示:

magic 加密字段,虚拟机判断当前的class文件是否被篡改过
minor_version 支持最低版本的jdk
major_version 编译使用的jdk版本
constant_pool_count 常量池的数量,一般为一个
cp_info constant_pool 常量池的结构体,数量不定(类型是cp_info结构体)
access_flags 访问级别,例如public等
this_class 当前类
super_class 父类
interfaces_count 类实现接口的数量
fields_count 类成员变量的数量
methods_count 类方法的数量
method_info methods 类方法的结构体
attributes_count 类属性的数量
attribute_info attributes 类属性的结构体

其中,access_flags如下:
这里写图片描述

constant_pool包括:

CONSTANT_Integer_info、CONSTANT_Long_info、CONSTANT_String_info等等
CONSTANT_Class_info:类的相关信息,包括当前类、引用到的类的信息
CONSTANT_Fieldref_info:类的域信息
CONSTANT_Methodref_info:类的方法信息

6、class文件的弊端

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

dex文件

1、什么是dex文件

能够被DVM或者Art虚拟机执行并且加载的文件格式。

2、dex文件的生成(需要配置android的adb环境变量)

先生成class文件(注意执行低版本的JDK版本,否则手机无法运行),然后执行:
dx --dex --output Test.dex Test.class
然后把生成的dex文件拷贝到手机:
adb push C:\Users\Administrator\Desktop\Test.dex /storage/emulated/0
adb shell
dalvikvm -cp /sdcard/Test.dex Test

3、dex文件的作用

 dex文件的作用是记录整个工程(通常是一个Android工程)的所有类文件的信息。

4、dex文件的结构

    8位字节的二进制流文件
    各个数据紧密排列,无间隙,减少了文件体积,加快加载速度
    整个工程的类信息都存放在一个dex文件中(不考虑dex分包的情况下)

同样的,可以通过010Editor来查看dex文件信息:
这里写图片描述
dex文件的结构如下图所示:
这里写图片描述

需要注意的是:
    文件头包含了dex文件的信息,所有数据的大致分布情况
    链接数据区:主要是指so库

dex文件头信息的详细信息如下:
这里写图片描述

class文件与dex文件的比较

本质上都是一样的,都是二进制流文件格式,dex文件是从class文件演变而来的
class文件存在冗余信息,dex文件则去掉了冗余,并且整合了整个工程的类信息。

结构对比图如下:
这里写图片描述

参考文献:https://www.jianshu.com/p/2eb518941681

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153527.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Centos7 升级内核小版本

    Centos7 升级内核小版本

    2021年5月13日
  • JAVA读取csv文件_java读取csv文件某一列

    JAVA读取csv文件_java读取csv文件某一列csv文件的介绍以下是来自百度百科的介绍逗号分隔值(Comma-SeparatedValues,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来

    2022年11月2日
  • android 屏幕触摸事件及处理机制解读

    android 屏幕触摸事件及处理机制解读原创性声明:Android最让我开心和有成就感的就是可以实现自定义,追根朔源是开源带来的,出于普适性,google不会提供定制性特别强的视图组件,但是我们可以自己动手,丰衣足食。但是,往往自定义的时候会出现好多问题,说到底是还没有吃透,我不推荐学生时期自学的时候过分追究原理,那个时期并不合适做这件事,那种闭关到世界第一再出关的苦学我也是不认可的。学习就是要循序渐进,慢慢吃透,扩展出

    2022年9月11日
  • 方法的改造

    方法的改造

    2022年2月23日
  • 线性回归目标函数—–最小二乘法推导过程「建议收藏」

    线性回归目标函数—–最小二乘法推导过程「建议收藏」在学习线性回归的时候

    2022年5月16日
  • Java 单例模式[通俗易懂]

    Java 单例模式[通俗易懂]单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。…

    2022年7月9日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号