查看Android/CyanogenMod 发烧笔记的源代码
←
Android/CyanogenMod 发烧笔记
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== Dalvik虚拟机 == Android 上的APP都是 Java 写的,使用 Java 编译器编译为 *.class 后再使用Android SDK提供的工具 DX 将其转化为 Dalvik 虚拟机可以执行的字节码文件 (*.dex) Dalvik虚拟机是Android中APP的运行基础。其指令集基于寄存器架构,执行其特有的文件格式 ———— DEX字节码来完成对象生命周期管理、堆栈管理、线程管理、安全异常管理、垃圾回收等重要功能。 Dalvik VM 与 Java VM 的不同之处在于: Dalvik基于寄存器结构,而JVM基于栈结构;Dalvik执行的是特有的DEX文件格式,而JVM运行的是*.class文件格式 [[文件:Jvm.and.dalvik.jpg]] Dalvik 的优点在于: * 在编译时提前优化代码而不是等到运行时,这会大大提升运行效率 * 虚拟机很小,使用的空间也小;被设计来满足可高效运行多种虚拟机实例 * 常量池已被修改为只使用32位的索引,以简化解释器 启动一个APP,就会有一个 Dalvik 虚拟机实例,每个APP都运行在自己的 Dalvik 虚拟机中,在系统中看,就是一个Linux进程,比如Android的系统设置: <pre> $ adb shell ps | grep settings system 1382 185 310728 41252 ffffffff 40064a70 S com.android.settings </pre> 每一个Android应用都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立的进程空间。不同的应用在不同的进程空间里运行,当一个虚拟机关闭或意外中止时不会对其它虚拟机造成影响,可以最大程度的保护应用的安全和独立运行。 守护进程Zygote是Dalvik虚拟机实例的孵化器,其是所有APP的父进程。system_server是其孵化分裂出来的地一个虚拟机实例,他是和硬件沟通的桥梁,当其它APP启动时会向system_server申请服务。 Zygote是在系统启动时产生的,它会完成虚拟机的初始化,库的加载,预置类库的加载和初始化等等操作,而在系统需要一个新的虚拟机实例时,Zygote通过复制自身,最快速的提供个系统。另外,对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域,大大节省了内存开销。 其与各APP进程的父子关系参考:http://wiki.jackslab.org/MIUI_V5_%E5%9C%A8%E8%80%81%E6%9C%BA%E4%B8%89%E6%98%9F_T959_%E4%B8%8A%E7%9A%84%E7%AC%AC%E4%B8%80%E7%9C%BC#Processes_Tree Android 虚拟机启动流程,在启动脚本 /init.rc 里,与 zygote 相关的有: <pre> ...... service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server class main socket zygote stream 660 root system onrestart write /sys/android_power/request_state wake onrestart write /sys/power/state on onrestart restart media onrestart restart netd ...... service surfaceflinger /system/bin/surfaceflinger class main user system group graphics onrestart restart zygote ...... service servicemanager /system/bin/servicemanager class core user system group system critical onrestart restart zygote onrestart restart media onrestart restart surfaceflinger onrestart restart drm 其中: service media /system/bin/mediaserver class main user media group audio camera inet net_bt net_bt_admin net_bw_acct drmrpc ioprio rt 4 ...... service netd /system/bin/netd class main socket netd stream 0660 root system socket dnsproxyd stream 0660 root inet socket mdns stream 0660 root system ...... service drm /system/bin/drmserver class main user drm group drm system inet drmrpc sdcard_r ...... </pre> 参考: http://carvencao.blog.sohu.com/154325146.html <br><br>
返回到
Android/CyanogenMod 发烧笔记
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面