JIT与Dalvik
JIT是"Just In Time Compiler"的缩写,就是"即时编译技术",与Dalvik虚拟机相关。
怎么理解这句话呢?这要从Android的一些特性说起。
JIT是在2.2版本提出的,目的是为了提高Android的运行速度,一直存活到4.4版本,因为在4.4之后的ROM中,就不存在Dalvik虚拟机了。
我们使用Java开发android,在编译打包APK文件时,会经过以下流程
- Java编译器将应用中所有Java文件编译为class文件
- dx工具将应用编译输出的类文件转换为Dalvik字节码,即dex文件
之后经过签名、对齐等操作变为APK文件。
Dalvik虚拟机可以看做是一个Java VM,他负责解释dex文件为机器码,如果我们不做处理的话,每次执行代码,都需要Dalvik将dex代码翻译为微处理器指令,然后交给系统处理,这样效率不高。
为了解决这个问题,Google在2.2版本添加了JIT编译器,当App运行时,每当遇到一个新类,JIT编译器就会对这个类进行编译,经过编译后的代码,会被优化成相当精简的原生型指令码(即native code),这样在下次执行到相同逻辑的时候,速度就会更快。
当然使用JIT也不一定加快执行速度,如果大部分代码的执行次数很少,那么编译花费的时间不一定少于执行dex的时间。Google当然也知道这一点,所以JIT不对所有dex代码进行编译,而是只编译执行次数较多的dex为本地机器码。
有一点需要注意,那就是dex字节码翻译成本地机器码是发生在应用程序的运行过程中的,并且应用程序每一次重新运行的时候,都要做重做这个翻译工作,所以这个工作并不是一劳永逸,每次重新打开App,都需要JIT编译。
另外,Dalvik虚拟机从Android一出生一直活到4.4版本,而JIT在Android刚发布的时候并不存在,在2.2之后才被添加到Dalvik中。
ART与AOT
AOT是"Ahead Of Time"的缩写,指的就是ART(Anroid RunTime)这种运行方式。
前面介绍过,JIT是运行时编译,这样可以对执行次数频繁的dex代码进行编译和优化,减少以后使用时的翻译时间,虽然可以加快Dalvik运行速度,但是还是有弊病,那就是将dex翻译为本地机器码也要占用时间,所以Google在4.4之后推出了ART,用来替换Dalvik。
在4.4版本上,两种运行时环境共存,可以相互切换,但是在5.0+,Dalvik虚拟机则被彻底的丢弃,全部采用ART。
ART的策略与Dalvik不同,在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。之后打开App的时候,不需要额外的翻译工作,直接使用本地机器码运行,因此运行速度提高。
当然ART与Dalvik相比,还是有缺点的。
- ART需要应用程序在安装时,就把程序代码转换成机器语言,所以这会消耗掉更多的存储空间,但消耗掉空间的增幅通常不会超过应用代码包大小的20%
- 由于有了一个转码的过程,所以应用安装时间难免会延长
但是这些与更流畅的Android体验相比而言,不值一提。
总结
通过前面背景知识的介绍,我终于可以更简单的介绍这四个名词之间的关系了:
- JIT代表运行时编译策略,也可以理解成一种运行时编译器,是为了加快Dalvik虚拟机解释dex速度提出的一种技术方案,来缓存频繁使用的本地机器码
- ART和Dalvik都算是一种Android运行时环境,或者叫做虚拟机,用来解释dex类型文件。但是ART是安装时解释,Dalvik是运行时解释
- AOT可以理解为一种编译策略,即运行前编译,ART虚拟机的主要特征就是AOT
相关推荐
IBM Research - Tokyo团队的目标是基于现有的成熟Method JIT编译器开发出一个高效的Trace-Based Java JIT编译器,并深入理解Trace JIT相对于Method JIT的优势与局限性。具体而言,研究者们想要探究: 1. **开发高效...
VMI-JITVMI-JITVMI-JITVMI-JITVMI-JIT
它通常与栈溢出或内存漏洞利用相结合,通过在内存中填充大量的相似代码来增加成功执行恶意代码的概率。 ### 工作原理 1. **内存填充**:攻击者首先创建一个包含大量重复代码的数组,并将其注入到进程的内存空间中...
JavaScript即时编译(Just-In-Time,简称JIT)是一种优化技术,它被广泛应用于JavaScript引擎中,以提高脚本的执行速度。JavaScript原本是一种解释型语言,代码在运行时逐行解析并执行,但JIT的引入使得部分代码在...
### MRP-Ⅱ与JIT结合的生产管理 #### MRP-Ⅱ(制造资源计划)概述 MRP-Ⅱ(Manufacturing Resource Planning),即制造资源计划系统,是基于MRP(物料需求计划)进一步发展而来的综合性管理信息系统。MRP-Ⅱ将企业...
JIT生产方式的诞生背景与20世纪初亨利·福特的批量生产方式形成鲜明对比。批量生产方式在产品单一、需求稳定时具有优势,但随着消费者需求多样化,这种模式无法快速响应市场变化,库存问题日益严重。JIT生产方式则...
JIT与ERP比较研究
JIT编译器与传统的静态编译器不同,它不是在程序编译时完成所有代码的转换,而是在运行时根据实际运行情况选择性地将部分热点代码编译为机器码。这种延迟编译的方式可以充分利用运行时的信息,例如方法调用的频率、...
将JIT与班组建设相结合,可以显著提升企业的生产效率。班组长的培训是关键,他们不仅是生产活动的指挥者,还是精益理念的传播者。通过培训,班组长能够理解并应用JIT原则,指导班组成员发现问题、及时沟通、快速解决...
#### Dalvik虚拟机与JIT技术概述 Dalvik虚拟机是专为Android设计的虚拟机,不同于传统的Java虚拟机(JVM),它采用寄存器架构而非栈架构,旨在减少内存占用,适应移动设备的硬件限制。在Android 2.2版本中,Dalvik...
### JIT Spray技术详解 #### 摘要与背景 随着远程攻击变得越来越难以实施以及边界防御成为标准配置,客户端侧的远程攻击成为了攻击者的新选择。为了抑制客户端侧漏洞的爆发,现代Windows操作系统采用了诸如数据...
jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识...
JIT(Just-In-Time)与零库存管理是现代企业中追求效率和降低成本的重要策略,尤其在软件开发领域,这种理念的应用能够显著优化流程,减少浪费,提升生产力。JIT的核心思想是在正确的时间、正确的地点,提供正确数量...
### STAGE-0 Shellcode与通用性 文章提到了“STAGE-0 Shellcode”的概念,这是一种基础shellcode,其作用是获取初始控制权,并随后加载和执行更复杂的payload。这种设计允许攻击者使用通用的shellcode框架,如...
### Android Framework介绍与Dalvik原理 #### 一、Android Framework概览 Android系统是一个复杂的软件堆栈,由多个层次组成,旨在为移动设备提供全面的支持。这些层包括Linux内核、中间层(如库和虚拟机)以及...
与Dalvik不同,ART采用预编译(Ahead-Of-Time, AOT)的方式,应用程序在安装时就完成了全部的字节码到机器码的转换,这种提前编译使得应用启动更快,运行更流畅。 **2. ART的工作机制** - **预编译(AOT)**: 当...
JIT生产方式,全称为Just-In-Time,是一种源自日本丰田公司的生产管理理念,旨在通过消除浪费、降低库存和提高效率来实现生产系统的优化。这种生产方式在20世纪50年代由丰田公司的大野耐一开始研究并实施,后来在70...
精益生产(Lean Production),又称作及时生产(Just In Time, JIT),是一种旨在实现生产过程中减少浪费、降低成本、提高生产效率和产品质量的管理思想和方法论。精益生产起源于20世纪50年代的丰田汽车公司,其生产...
1. 面向需求:与传统的库存导向采购不同,JIT采购是根据实时需求进行的,直接将物料送到生产线上,避免过度库存。 2. 质量控制:只采购符合客户质量要求的产品,拒绝次品和废品,确保生产过程的质量稳定。 3. 数量...