浅谈JIT&AOT

1218496450.jpg

这是一篇给自己脑补的笔记!

想必很多Android用户已经在自己各种设备上使用Android L了。自己年初在淘宝上¥1200进了nexus5,系统早早的升级到Android L,不得不说Nexus是一个非常非常棒的手机。

Android L与之前Android KK的对比,Dalvik虚拟机已经在L中移除,ART(Android run time)在kk的时候作为Optional,现在已经正式代替Dalvik。讲到这些转变的时候,疑问就来了而且还根本停不下来,我不知道Dalvik之前是怎么做的,Java于我只是大学一个学期的课程,Java虚拟机,我当时在课堂上绞尽脑汁也想不出一个具体样子出来,然后浑浑噩噩,大学就过去了,好吧我想知道java在传统JVM中是如何运行的,在DVM中又是如何运行的,什么是dex,什么是odex,什么是JIT,什么是AOT,什么是oat,什么是ART...?有时想想,想这么多真的好嘛!?不过没办法,有时脑子蹦蹦出来这么多疑问,实在憋不下去就会觉得有必要抽个时间脑补一下。

dex

本质上java文件编译后都是字节码ByteCode,不管是传统的JVM,还是Google Dalvik DVM。只是这两种虚拟机环境下ByteCode有所差异,最直观的是在JVM运行的是.class文件,而DVM是.dex文件,DVM专门对移动操作系统(尤其是Android)的特性进行了优化,并且DVM的设计是基于寄存器的,指令集有非常大的不同(具体未研究),还有等等等等...,好吧,到这步,了解到.dex是字节码,至于dex文件format构成,脑补阶段暂时略过吧XD~~。

JIT

接下来Android2.2的时候引入了JIT(JUST-IN-TIME)技术,JIT技术准确来讲应该是JIT Compiler,那JIT之前是怎么一回事?最早的时候,java是由解释器(Interpreter),将每个java指令转译为对等的微处理器指令,并根据转译后的指令先后次序依序执行,一个java指令可能对应十几或者几十个对等微处理指令,运行的时候还要先解释,在硬件条件差的情况下,执行速度是可想而知有多慢的。为了解决这个问题,JIT就来了,当java执行runtime环境时,每遇到一个class,JIT就会对这个类进行编译,生成相当精简的二进制码,花费少许的编译时间来换取后续的执行速率,这个效率提高还是比较大的,但这并没有达到顶尖的效能,因为某些java文件是极少执行的,编译它们的时间有可能远远长于转译器转译执行的时间,整体下来,花费的时间并没有减少。基于JIT的经验,又出来了动态编译器(dynamic compiler),动态预判哪些需要compile哪些需要转译,所以动态编译器是既包含了转译器&编译器的。尚不确定Android的JIT技术是否为这种dynamic compiler。另外,说到这里,我们第一次执行APP速度慢一些应该是因为在做一些Compile的动作,如果说得不对,还请指正。google当时说,JIT技术的引入速度提升3-5倍,后来发现我们华丽丽的又被骗了。

Odex

讲了dex、JIT,接下来讲讲Odex,Odex即Optimize Dex对dex文件的优化,最直观的好处:

  • deodex在系统第一次开机时,需要提取所有apk里的dex文件,而odex优化是提前提取出来了,开机速度&运行速度都有提高。
  • Odex优化后,APK里可以没有dex文件,而未Odex在APK包里有一份dex文件,在/data/dalvik-cache下还有提取出来的一份,浪费存储空间。
  • 一定程度上保护了厂商自己的APK,因为apk里只有资源文件,反汇编没有意义,直接拷贝到别处无法安装运行...。

AOT

技术随着时间之轮毫不停歇前行。Android kitkat 4.4,新的Android Runtime(ART)出现了,做为一个可选项,供一些愿意的用户测试使用,当然这个时候Dalvik还是作为默认的虚拟机环境。ART采取了AOT(Ahead-Of-Time)技术,简单一点理解就是,在APK安装的时候就会做预先编译动作,编译好的文件是OAT文件,该文件本质上是一个ELF文件,这里与dex(Odex)文件最大的区别是OAT文件不再是字节码文件,而是一个可执行文件,可以更底层的与硬件接触,运行时也省去了预编译和转译的时间。在Android L中我们找不到OAT文件,其实oat文件依旧以.odex作为后缀,通过file命令或者UE打开可以看到ELF头部。另外ART设计是考虑兼容性的,即在Dalvik可以运行的APP,在系统升级到5.0、5.1(Dalvik->ART)这些APP依旧可以运行,这个是通过dex2oat做到的,dalvik下的dex、odex文件均可以通过这个工具转化为oat文件,并且odex文件将比dex文件编译的更快。

脑补暂告一段落,欢迎客官拍砖、指正。

References:

http://www.importnew.com/596.html
http://bbs.mfunz.com/thread-1007717-1-1.html
http://source.android.com/devices/tech/dalvik/configure.html
http://source.android.com/devices/tech/dalvik/index.html
http://www.th7.cn/Program/Android/201401/168089.shtml

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容