跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Dalvik虚拟机
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{NoteTA |G1=IT |G2=Mobile }} '''Dalvik虚拟机'''是[[Google]]为[[Android]]操作系统设计的[[Java虚拟机]]实现,作为Android运行时环境的核心组件从2008年Android 1.0开始使用,直至2014年被[[ART (运行时环境)|ART]]取代。其名称来源于冰岛的一个名为Dalvík的小渔村。 == 技术架构 == Dalvik虚拟机采用不同于标准[[JVM]]的设计架构: === 寄存器架构 === 与基于栈的JVM不同,Dalvik使用基于寄存器的架构,特点包括: * 指令集更紧凑 * 执行速度更快 * 减少指令数量(平均减少30%) === 字节码格式 === Dalvik不直接执行Java [[字节码]],而是处理转换后的<code>.dex</code>(Dalvik Executable)格式: * 通过[[dx工具]]将Java类文件转换为单个dex文件 * 支持多类文件合并优化 * 使用共享常量池减少内存占用 <mermaid> graph LR A[Java .class文件] --> B[dx工具] B --> C[classes.dex] C --> D[Dalvik虚拟机] </mermaid> == 执行模型 == Dalvik采用独特的运行时模型: === 进程隔离 === * 每个Android应用运行在独立的Linux进程中 * 每个进程包含一个Dalvik虚拟机实例 * 应用间通过[[Binder (Android)|Binder]]机制通信 === 内存管理 === * 使用标记-清除(Mark-and-Sweep)垃圾回收算法 * 堆内存分为: * 活跃堆(Active Heap) * 零碎堆(Zygote Heap) === JIT编译 === 从Android 2.2开始引入[[即时编译|JIT]]编译器: * 动态编译热点代码 * 性能提升2-5倍 * 代码缓存大小限制为64KB == 性能优化 == Dalvik包含多项优化技术: === 预验证 === * 在APK安装时进行字节码验证 * 减少运行时验证开销 * 使用<code>preverified</code>标记 === 线程模型 === * 主线程(UI线程)与工作线程分离 * 通过[[Handler (Android)|Handler]]机制实现线程通信 * 全局JNI引用表管理 == 代码示例 == 以下展示Dalvik字节码与Java字节码的差异: Java源码: <syntaxhighlight lang="java"> public int add(int a, int b) { return a + b; } </syntaxhighlight> 标准JVM字节码: <syntaxhighlight lang="text"> iload_1 iload_2 iadd ireturn </syntaxhighlight> Dalvik字节码: <syntaxhighlight lang="text"> add-int v0, v1, v2 return v0 </syntaxhighlight> == 历史演进 == Dalvik的主要版本演进: * 2008 - Android 1.0:初始版本 * 2009 - Android 1.5:性能优化 * 2010 - Android 2.2:引入JIT * 2014 - Android 4.4:引入ART作为可选运行时 * 2015 - Android 5.0:完全由ART取代 == 实际应用 == Dalvik虚拟机的设计直接影响Android开发: * 应用启动时间优化 * [[ProGuard]]代码混淆兼容性 * [[多dex支持]]机制 * [[Android NDK]]本地代码交互 == 参见 == * [[ART (运行时环境)]] * [[Android Runtime]] * [[Java虚拟机]] * [[Android性能优化]] [[Category:Android平台]] [[Category:Java虚拟机]] [[Category:移动计算]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:NoteTA
(
编辑
)
模块:Crc32lua
(
编辑
)
模块:NoteTA
(
编辑
)
模块:WikitextLC
(
编辑
)