没人?我来记一个笔记
叽叽叽
这个图片很棒呀.
好的好的谢谢老师哦
我哦学长学姐们加油吧,我
我low辛苦咯哦健健康康
我看看好舍不得你们
真考虑考虑嘻嘻嘻嘻嘻嘻
今天经历了行李另一名哦
dex文件与java编译的class文件关系。
dex文件中方法数超限解决
很好很好很好很好9
这个要记下来@过两天要记得看
Android4.4以下版本采用Dalvik虚拟机,4.4及以上采用ART虚拟机。
1,在java.vm.version < 2.0.0(Dalvik虚拟机),在App运行过程中,Dex文件字节码经过JIT即时编译器动态的来编译成可执行的本地机器码,之后再执行,而且每次重新启动App都要经过一次这样的动态编译。这会导致应用启动慢,运行慢。
2,在java.vm.version >= 2.0.0(ART虚拟机),使用AOT提前编译,在App安装时就将Dex字节码预编译转为本地机器码(原生指令),生成一个可以在本地运行的oat文件并存储在本地。优点:启动快,运行快,好点少。其在系统层面已经支持了多dex文件的处理,在预编译时合并为oat文件。
Dex里的Method ID采用ushort类型(两个字节)做标记,范围为0~65536,故方法数超限的数量为65536。
java和kt编译为class文件后用于JVM中运行,由于手机上的内存及处理器资源相对有限,google专门开发了运行在手机上虚拟机Dalvik/ART,而Dex文件是众多class处理后的产物(经过翻译,重构,解释,去冗余、压缩等),用于在Dalvik环境下运行。Dex与Dalvik虚拟机的关系,可以理解为exe文件与windows系统的关系。
各个class中包含对应类的信息,常量池,类字段和方法等信息,dex则将这些class的数据进行重新排布,同类型的放置在一起。