admin管理员组

文章数量:1530085

深入解析Android虚拟机

编辑

锁定

讨论

上传视频

《深入解析Android虚拟机》是2014年由清华大学出版社出版的图书,作者是张子言。

书    名

深入解析Android虚拟机

作    者

张子言

ISBN

9787302344087定    价

49.50元

出版社

清华大学出版社

出版时间

2013-12-27

装    帧

平装

深入解析Android虚拟机图书简介

编辑

本书循序渐进地讲解了Android虚拟机技术的基本知识,内容新颖、知识全面、讲解详细。全书分为13个章节,分别讲解了Android系统的基础知识、Android系统的结构和核心框架、Java虚拟机和Dalvik虚拟机的知识、实现程序编译和调试、Dalvik的运作流程、DEX优化和安全管理、Android虚拟机生命周期管理和内存分配策略、虚拟机垃圾收集和线程管理、JNI的基本原理、JIT编译的基 本过程和具体方法,以及虚拟机中的异常管理机制方面的知识。[1]

深入解析Android虚拟机目录

编辑

第1章Android系统介绍 1

1.1Android是一款智能手机 1

1.1.1什么是智能手机 1

1.1.2当前主流的智能手机系统 2

1.2Android的巨大优势 3

1.3在电脑上启动Android虚拟机 4

1.3.1安装AndroidSDK 4

1.3.2安装JDK、Eclipse、

AndroidSDK 5

1.3.3设定AndroidSDKHome 12

1.4Android模拟器 13

1.4.1Android模拟器简介 14

1.4.2模拟器和仿真机究竟有何区别 14

1.4.3创建Android虚拟设备(AVD) 14

1.4.4模拟器的总结 16

1.5搭建环境过程中的常见问题 18

1.5.1不能在线更新 18

1.5.2显示“Projectnamemustbe

specified”提示 20

1.5.3Target列表中没有Target选项 21

第2章Android系统的结构 23

2.1Android安装文件简介 23

2.1.1AndroidSDK目录结构 23

2.1.2android.jar及内部结构 24

2.1.3SDK帮助文档 25

2.1.4解析AndroidSDK实例 26

2.2分析Android的系统架构 26

2.2.1Android体系结构介绍 27

2.2.2Android工程文件结构 29

2.2.3应用程序的生命周期 32

2.3简析Android内核 34

2.3.1Android继承于Linux 34

2.3.2Android内核和Linux内核的

区别 35

2.4简析Android源码 37

2.4.1获取并编译Android源码 37

2.4.2Android对Linux的改造 38

2.4.3为Android构建Linux的

操作系统 39

2.4.4分析Android源码结构 39

2.4.5编译Android源码 44

2.4.6运行Android源码 45

2.5实践演练——演示两种编译Android

程序的方法 46

2.5.1编译NativeC的helloworld

模块 46

2.5.2手工编译C模块 47

第3章虚拟机概述 51

3.1虚拟机的作用 51

3.2.1理解Java虚拟机 51

3.2.2Java虚拟机的数据类型 52

3.2.3Java虚拟机的体系结构 53

3.2.4Java虚拟机的生命周期 58

3.3Android虚拟机——DalvikVM 59

3.3.1Dalvik架构 59

3.3.2和Java虚拟机的差异 60

3.3.3DalvikVM的主要特征 61

3.3.4DalvikVM的代码结构 61

3.4Dalvik控制VM详解 63

3.5DalvikVM架构 66

3.5.1Dalvik的进程管理 67

3.5.2Android的初始化流程 67

第4章编译和调试 68

4.1Windows环境编译Dalvik 68

4.2GDB调试Dalvik 71

4.2.1准备工作 71

4.2.2GDB调试C程序 72

4.2.3GDB调试Dalvik 74

4.3使用dexdump 75

4.3.1dexdump的反编译功能 75

4.3.2使用dexdump查看jar文件 76

4.4Dalvik虚拟机编译脚本 80

4.4.1Android.mk文件 80

4.4.2ReconfigureDvm.mk文件 81

4.4.3dvm.mk文件 84

4.5Android4.0.1源码下载、模拟器编译和

运行 85

第5章Dalvik虚拟机的运作流程 88

5.1Dalvik虚拟机相关的可执行程序 88

5.1.1dalvikvm 88

5.1.2dvz 89

5.1.3app_process 90

5.2Dalvik虚拟机的初始化 92

5.2.1开始虚拟机的准备工作 92

5.2.2初始化跟踪显示系统 93

5.2.3初始化垃圾回收器 93

5.2.4初始化线程列表和主线程环境

参数 93

5.2.5分配内部操作方法的表格内存 95

5.2.6初始化虚拟机的指令码相关的

内容 95

5.2.7分配指令寄存器状态的内存 95

5.2.8分配指令寄存器状态的内存 96

5.2.9初始化虚拟机最基本用的

Java库 96

5.2.10进一步使用的Java类库

线程类 97

5.2.11初始化虚拟机使用的异常

Java类库 99

5.2.12释放字符串哈希表 100

5.2.13初始化本地方法库的表 101

5.2.14初始化内部本地方法 101

5.2.15初始化JNI调用表 101

5.2.16缓存Java类库里的反射类 104

5.2.17最后的工作 106

5.3启动zygote 110

5.3.1在init.rc中配置zygote启动

参数 111

5.3.2启动Socket服务端口 111

5.3.3加载preload-classes 113

5.3.4加载preload-resources 114

5.3.5使用folk启动新进程 115

5.4启动SystemServer进程 116

5.4.1启动各种系统服务线程 117

5.4.2启动第一个Activity 119

5.5class类文件的加载 119

5.5.1DexFile在内存中的映射 119

5.5.2ClassObject——Class在加载后

的表现形式 121

5.5.3findClassNoInit——加载Class

并生成相应ClassObject的

函数 122

5.5.4加载基本类库文件 123

5.5.5加载用户类文件 124

5.6解释执行类 124

5.6.1Dalvik虚拟机字节码和

JVM字节码的区别 124

5.6.2Davik虚拟机的解释器优化 125

第6章dex的优化和安全管理 127

6.1Androiddex文件优化简介 127

6.2dex文件的格式 128

6.2.1map_list 129

6.2.2string_id_item 131

6.2.3type_id_item 135

6.2.4proto_id_item 136

6.2.5field_id_item 137

6.2.6method_id_item 137

6.2.7class_def_item 138

6.3dex文件结构 141

6.3.1文件头(FileHeader) 142

6.3.2魔数字段 143

6.3.3检验码字段 143

6.3.4SHA-1签名字段 145

6.3.5map_off字段 146

6.3.6string_ids_size和off字段 147

6.4Android的DexFile接口 149

6.4.1构造函数 149

6.4.2公共方法 149

6.5Dex和动态加载类机制 151

6.5.1类加载机制 151

6.5.2Dalvik虚拟机类加载机制 151

6.5.3具体的实际操作 153

6.5.4代码加密 153

6.6Android动态加载jar和DEX 154

6.6.1Android的动态加载 154

6.6.2演练动态加载 154

6.7dex文件的再优化 157

第7章生命周期管理 158

7.1Android程序的生命周期 158

7.1.1进程和线程 158

7.1.2进程的类型 159

7.2Activity的生命周期 160

7.2.1Activity的几种状态 160

7.2.2分解剖析Activity 161

7.2.3几个典型的场景 162

7.2.4管理Activity的生命周期 163

7.2.5Activity的实例化与启动 163

7.2.6Activity的暂停与继续 164

7.2.7Activity的关闭/销毁与

重新运行 165

7.2.8Activity的启动模式 166

7.3Android进程与线程 166

7.3.1进程 167

7.3.2线程 167

7.3.3线程安全的方法 167

7.4测试生命周期 168

7.5Service的生命周期 172

7.5.1Service的基本概念和用途 172

7.5.2Service的生命周期详解 172

7.5.3Service与Activity通信 172

7.6Android广播的生命周期 178

7.7Dalvik的进程管理 180

7.7.1Zygote 180

7.7.2Dalvik的进程模型 191

7.7.3Dalvik虚拟机的进程通信 196

第8章内存分配策略 201

8.1Java的内存分配管理 201

8.1.1内存分配中的栈和堆 201

8.1.2堆和栈的合作 204

8.2运行时的数据区域 207

8.2.1程序计数器

(ProgramCounterRegister) 208

8.2.2Java的虚拟机栈VMStack 209

8.2.3本地方法栈NativeMethod

Stack 209

8.2.4Java堆(JavaHeap) 210

8.2.5方法区 210

8.2.6运行时常量池 211

8.2.7直接内存 212

8.3对象访问 212

8.3.1对象访问基础 213

8.3.2具体测试 214

8.4内存泄漏 220

8.4.1内存泄漏的分类 221

8.4.2内存泄漏的定义 221

8.4.3内存泄漏的常见问题和后果 221

8.4.4检测内存泄漏 223

8.5Davlik虚拟机的内存分配 223

8.6分析Dalvik虚拟机的内存管理

机制源码 225

8.6.1表示堆的结构体 225

8.6.2表示位图堆的结构体数据 226

8.6.3HeapSource结构体 226

8.6.4和markbits相关的结构体 227

8.6.5结构体GcHeap 228

8.6.6初始化垃圾回收器 230

8.6.7初始化和Heap相关的信息 230

8.6.8创建GcHeap 231

8.6.9追踪位置 233

8.6.10实现空间分配 234

8.6.11其他模块 237

8.7优化Dalvik虚拟机的堆内存分配 242

8.8查看Android内存泄漏的工具

——MAT 243

第9章垃圾收集 247

9.1初探Java虚拟机中的垃圾收集 247

9.1.1何谓垃圾收集 247

9.1.2常见的垃圾收集策略 247

9.1.3Java虚拟机的垃圾收集策略 249

9.2Java虚拟机垃圾收集的算法 250

9.2.1“标记-清除”算法 251

9.2.2复制算法 251

9.2.3标记-整理算法 252

9.2.4分代收集算法 253

9.3垃圾收集器 253

9.3.3ParallelScavenge收集器 256

9.3.4SerialOld收集器 256

9.3.5ParallelOld收集器 257

9.3.6CMS收集器 257

9.3.7G1收集器 258

9.3.8垃圾收集器参数总结 259

9.4Android中的垃圾回收 260

9.4.1sp和wp简析 260

9.4.2详解智能指针(androidrefbase类[2]

(sp和wp)) 262

9.5Dalvik垃圾收集的三种算法 264

9.5.1引用计数 264

9.5.2MarkSweep算法 264

9.5.3和垃圾收集算法有关的函数 266

9.5.4在什么时候进行垃圾回收 275

9.5.5调试信息 276

9.6Dalvik虚拟机和Java虚拟机垃圾收集

机制的区别 277

第10章线程管理 279

10.1Java中的线程机制 279

10.1.1Java的多线程 279

10.1.2线程的实现 280

10.1.3线程调度 282

10.1.4线程状态间的转换 283

10.1.5线程安全 287

10.1.6线程安全的实现方法 290

10.1.7无状态类 294

10.2Android的线程模型 296

10.2.1Android的单线程模型 297

10.2.2MessageQueue 297

10.2.3AsyncTask 298

10.3分析Android的进程通信机制 299

10.3.1Android的进程间通信(IPC)

机制Binder 299

10.3.2ServiceManager是Binder

机制的上下文管理者 301

10.3.3分析Server和Client获得

ServiceManager的过程 319

第11章JNI接口 323

11.1JNI技术基础 323

11.1.1JNI概述 323

11.1.2JNI带来了什么 323

11.1.3JNI的结构 324

11.1.4JNI的实现方式 325

11.1.5JNI的代码实现和调用 325

11.2JNI技术的功能 326

11.2.1解决性能问题 326

11.2.2解决本机平台接口调用问题 327

11.2.3嵌入式开发应用 327

11.3在Android中使用JNI 328

11.3.1使用JNI的流程 328

11.3.2使用JNI技术来进行

二次封装 328

11.3.3AndroidJNI使用的数据

结构JNINativeMethod 330

11.3.4通过JNI实现Java对

C/C++函数的调用 331

11.3.5调用Native(本地)方法传递

参数并且返回结果 335

11.3.6使用JNI调用C/C++开发的

共享库 337

11.3.7使用线程及回调更新UI 341

11.3.8使用JNI实现Java与C之间

传递数据 343

11.4Dalvik虚拟机的JNI测试函数 348

11.5总结Android中JNI编程的

一些技巧 349

11.5.1传递Java的基本类型 349

11.5.2传递String参数 350

11.5.3传递数组类型 351

11.5.4二维数组和String数组 351

第12章JIT编译 356

12.1JIT简介 356

12.1.1JIT概述 356

12.1.2Java虚拟机主要的优化技术 358

12.1.3Dalvik虚拟机中JIT的实现 359

12.2Dalvik虚拟机对JIT的支持 359

12.3汇编代码和改动 360

12.3.1汇编部分代码 361

12.3.2对C文件的改动 361

12.4Dalvik虚拟机中的源码分析 361

12.4.1入口文件 362

12.4.2核心函数 373

12.4.3编译文件 376

12.4.4BasicBlock处理 387

12.4.5内存初始化 388

12.4.6对JIT源码的总结 392

第13章异常管理 394

13.1Java中的异常处理 394

13.1.1认识异常 394

13.1.2Java的异常处理机制 395

13.1.3Java提供的异常处理类 397

13.2处理Java异常的方式 398

13.2.1使用try…catch处理异常 398

13.2.2在异常中使用finally关键字 399

13.2.3访问异常信息 399

13.2.4抛出异常 400

13.2.5自定义异常 401

13.2.6Java异常处理语句的规则 402

13.3Java虚拟机的异常处理机制 404

13.3.1Java异常处理机制基础 404

13.3.2COSIX虚拟机异常处理的

设计与实现 405

13.4分析Dalvik虚拟机异常处理的源码 409

13.4.1初始化虚拟机使用的异常

Java类库 409

13.4.2抛出一个线程异常 410

13.4.3持续抛出进程 411

13.4.4抛出异常名 413

13.4.5找出异常的原因 413

13.4.6清除挂起的异常和等待

初始化的异常 417

13.4.7包装“现在等待”异常的

不同例外 417

13.4.8输出跟踪当前异常的

错误信息 418

13.4.9搜索和当前异常相匹配的

方法 419

13.4.10获取匹配的捕获块 421

13.4.11进行堆栈跟踪 423

13.4.12生成堆栈跟踪元素 425

13.4.13将内容添加到堆栈跟踪

日志中 426

13.4.14打印输出为堆栈跟踪信息 427[2]

词条图册

更多图册

参考资料

1.

深入解析Android虚拟机

.清华大学出版社[引用日期2015-04-29]

2.

目录

.清华大学出版社[引用日期2018-01-22]

本文标签: 虚拟机加载机制android