《Android虚拟机》----虚拟机概述
No1:
虚拟机是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离的环境中的完整计算机系统。
No2:
Java虚拟机由如下五个部分组成:一组指令集、一组寄存器、一个栈、一个无用单元收集堆、一个方法区域。
No3:
Java虚拟机中有4种寄存器:
1)pc:Java程序计数器
2)optop:指向操作数栈顶端的指针
3)frame:指向当前执行方法的执行环境的指针
4)vars:指向当前执行方法的局部变量区第一个变量的指针
No4:
Java虚拟机的栈有三个区域:局部变量区、运行环境区、操作数区
No5:
.dex文件格式会把所有的.class文件内容整合到一个文件中。这样,除了减少整体的文件尺寸,I/O操作,也提高了类的查找速度。原来每个类文件中的常量池,在.dex文件中由一个常量池来管理。
No6:
Zygote是一个虚拟机进程,同时也是一个虚拟机实例的孵化器,每当系统要求执行一个Android应用程序,Zygote就会孵化出一个子进程来执行该应用程序。这样做的好处显而易见:Zygote进程是在系统启动时产生的,它会完成虚拟机的初始化,库的加载,预置类库的加载和初始化等操作,而在系统需要一个新的虚拟机实例时,Zygote通过复制自身,最快速地提供一个系统。另外,对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块共享区域,这样可以大大节省内存开销。
No7:
系统尝试预校验.dex文件中的所有类,从而降低class的负担,从而可以使用一系列的优化来提升运行性能。这些都是通过dexopt命令来实现的。
No8:
Dalvik VM的实现包括三个独立的解释内核:快速、可移植、调试。
快速解释器是为当前平台优化的,可能包括手动优化的汇编文件;相对的,可移植解释器是用C语言写的,可在广泛的平台上使用;调试解释器是可移植解释器的变种,包括了支持程序分析和单步。
No9:

No10:

No11:
Dalvik进程管理是依赖于Linux的进程体系结构的,如要为应用程序创建一个进程,它会使用Linux的fork机制来复制一个进程(复制进程往往比创建进程效率更高)。
Zygote是一个虚拟机进程,同事也是一个虚拟机实例的孵化器,通过init进程启动。首先会孵化出System_Server(Android绝大多系统服务的守护进程,它会监听socket等待请求命令,当有一个应用程序启动时,就会向它发出请求,Zygote就会孵化出一个新的应用程序进程)。每当系统要求执行一个Android应用程序时,Zygote就会运用Linux的fork机制产生一个子进程来执行该应用程序。
No12:
Android的初始化流程

No13:
Android中进程总结:
1)系统启动时init进程会创建Zygote进程,Zygote进程负责后续Android应用程序框架层的其他进程的创建和启动工作
2)Zygote进程会首先创建一个SystemServer进程,SystemServer进程负责启动系统的关键服务,如包管理服务PackageManagerService和应用程序组件管理服务ActivityManagerService
3)当我们需要启动一个Android应用程序时,ActivityManagerService会通过Socket进程间通信机制,通知Zygote进程为这个应用程序创建一个新的进程
No14:
Zygote进程是在系统启动时产生的,它会完成虚拟机的初始化、库的加载、预置类库的加载和初始化等操作,而在系统需要一个新的虚拟机实例时。Zygote通过复制自身,最快速的提供个系统。另外,对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域,大大节省了内存开销。
当Zygote进程在使用Linux的fork机制时有如下三种不同方式:
1)fork():孕育一个普通的进程,该进程属于Zygote进程
2)forkAndSpcecialize():孕育一个特殊的进程,该进程不再是Zygote进程
3)forkSystemServer():孕育一个系统服务进程
《Android虚拟机》----虚拟机概述的更多相关文章
- 启用VTX技术支持启动android的虚拟机 - 报错
第一次启用VTX技术支持启动android的虚拟机,启动时提示如下错误: Starting emulator for AVD 'AVD_for_Android_TV_1080p_by_Google'e ...
- Android逆向基础----Android Dalvik虚拟机
Android Dalvik虚拟机的特点: l 体积小,占用内存空间小. l 专有DEX可执行文件. l 常量池采用32位索引值,寻址类方法名,字段名,常量更快. l 基于寄存器架构,并拥有一 ...
- android -------- java虚拟机和Dalvik虚拟机
java虚拟机 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.Java虚拟机屏蔽了 ...
- 我对android davilk 虚拟机的理解
Davilk虚拟机作为Android平台的一部分.Google公司花了大量时间思考针对低功耗手持设备的优化设计.在智能手机出现之前,与桌面设备相比,手持设备在内存和速度方面落后8-10年.它们的计算能 ...
- Android广播机制概述
1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器).广播作为Android组件间的通 ...
- Android网络编程概述
Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...
- Java虚拟机--虚拟机字节码执行引擎
Java虚拟机--虚拟机字节码执行引擎 所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果. 运行时栈帧结构 用于支持虚拟机进行方法调用和方 ...
- Android零基础入门第16节:Android用户界面开发概述
原文:Android零基础入门第16节:Android用户界面开发概述 相信通过前面15期的学习,Android的开发环境已经基本掌握了,如果仍有问题,欢迎到Android零基础入门技术讨论微信群交流 ...
- Android Dalvik虚拟机
虽然Android平台使用Java来开发应用程序,但Android程序却不是运行在标准Java虚拟机上的. 可能是出于效率和版权的考虑,Google为Android专门设计了一套虚拟机Dalvik V ...
- 转 Android Dalvik虚拟机初识
首先,让我们来思考下面几个问题: 什么是Dalvik虚拟机? Dalvik VM与JVM有什么区别? Dalvik VM有什么新的特点? Dalvik VM的架构是怎么样的? 首先,我得承认第一个问题 ...
随机推荐
- CIFAR10/CIFAR100数据集介绍
CIFAR-10/CIFAR-100数据集解析 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 CIFAR-10/CIFAR-100数据集 CIFAR-10和CIFAR-100被标记 ...
- [转]hadoop2.x常用端口
原文地址:http://www.zhixing123.cn/ubuntu/40649.html HDFS DataNode 50010 dfs.datanode.address datanode服务端 ...
- 重构改善既有代码设计--重构手法15:Remove Middle Man (移除中间人)
某个类做了过多的简单委托动作.让客户直接调用受托类. 动机:在Hide Delegate (隐藏委托关系)的“动机”中,谈到了“封装委托对象”的好处.但是这层封装也是要付出代价的,它的代价是:每当客户 ...
- 《HTML5编程之旅》系列二:Communication 技术初探
本文主要探讨用于构建实时跨源通信的两个模块:跨文档消息通信(Cross Document Messaging)和XMLHttpRequestLevel2.通过这两个模块,我们可以构建不同域间进行安全 ...
- Centos tomcat jmx 远程连接
jmx配置: -Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.mana ...
- LintCode 402: Continuous Subarray Sum
LintCode 402: Continuous Subarray Sum 题目描述 给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的下标 ...
- JavaScript设置粘贴板
设置复制 document.body.oncopy = function(){ alert('不许复制'); return false; }; 设置粘贴 document.getElementById ...
- css3背景色过渡
<!DOCTYPE html><html lang="zh-cmn-Hans"><head><meta charset="utf ...
- python作业高级FTP(第八周)
作业需求: 1. 用户加密认证 2. 多用户同时登陆 3. 每个用户有自己的家目录且只能访问自己的家目录 4. 对用户进行磁盘配额.不同用户配额可不同 5. 用户可以登陆server后,可切换目录 6 ...
- php webshell常见函数
0x1 直接在字符串变量后面加括号, 会调用这个函数: <?php $s = 'system'; $e = 'assert'; $s('whoami'); $e('phpinfo();'); 0 ...