计算机
类型
可以朗读
语音朗读
1173千字
字数
2016-11-01
发行日期
展开全部
主编推荐语
掌握Android虚拟机:深入剖析Dalvik VM
内容简介
本书循序渐进的讲解了Android虚拟机系统的基本知识,并剖析了其整个内存系统的进程和运作流程,并对虚拟机系统优化和异常处理的知识进行了详细讲解。遵循由浅入深的写作方法,按照运作流程逐步分析了Dalvik VM系统的方方面面。本书几乎涵盖了Dalvik VM系统的所有主要内容,并且全书内容言简意赅,讲解方法通俗易懂、详细,不但适合应用高手们的学习,也特别有利于初学者学习并消化。
目录
- 版权信息
- 内容提要
- 前言
- 第1章 获取并编译Android源码
- 1.1 获取Android源码
- 1.1.1 在Linux系统获取Android源码
- 1.1.2 在Windows平台获取Android源码
- 1.1.3 Windows获取Android L源码
- 1.2 分析Android源码结构
- 1.3 编译Android源码
- 1.3.1 搭建编译环境
- 1.3.2 开始编译
- 1.3.3 在模拟器中运行
- 1.3.4 常见的错误分析
- 1.3.5 实践演练——演示两种编译Android程序的方法
- 1.4 编译Android Kernel
- 1.4.1 获取Goldfish内核代码
- 1.4.2 获取MSM内核代码
- 1.4.3 获取OMAP内核代码
- 1.4.4 编译Android的Linux内核
- 第2章 Java虚拟机基础
- 2.1 虚拟机的作用
- 2.2 Java虚拟机概述
- 2.2.1 JVM的数据类型
- 2.2.2 Java虚拟机体系结构
- 2.2.3 JVM的生命周期
- 2.3 JVM的安全性
- 2.3.1 JVM的安全模型
- 2.3.2 沙箱模型的4种组件
- 2.3.3 分析Java的策略机制
- 2.4 网络移动性
- 2.4.1 现实需要网络移动性
- 2.4.2 网络移动性
- 2.5 内存异常和垃圾处理
- 2.5.1 内存分配中的栈和堆
- 2.5.2 运行时的数据区域
- 2.5.3 对象访问
- 2.5.4 内存泄露
- 2.5.5 JVM的垃圾收集策略
- 2.5.6 垃圾收集器
- 2.6 Java内存模型
- 2.6.1 Java内存模型概述
- 2.6.2 主内存与工作内存
- 2.6.3 内存间交互操作
- 第3章 Dalvik和ART基础
- 3.1 Dalvik VM和JVM的差异
- 3.2 Dalvik虚拟机的主要特征
- 3.3 Dalvik VM架构
- 3.3.1 Dalvik虚拟机的代码结构
- 3.3.2 dx工具
- 3.3.3 Dalvik VM的进程管理
- 3.3.4 Android的初始化流程
- 3.4 Dalvik VM控制VM命令详解
- 3.4.1 基本命令
- 3.4.2 扩展的JNI检测
- 3.4.3 断言
- 3.4.4 字节码校验和优化
- 3.4.5 Dalvik VM的运行模式
- 3.4.6 死锁预测
- 3.4.7 dump堆栈追踪
- 3.4.8 dex文件和校验
- 3.4.9 产生标志位
- 3.5 ART机制基础
- 3.5.1 什么是ART模式
- 3.5.2 ART优化机制基础
- 第4章 分析JNI
- 4.1 JNI的本质
- 4.2 分析Java层
- 4.2.1 加载JNI库
- 4.2.2 实现扫描工作
- 4.2.3 读取并保存信息
- 4.2.4 删除SD卡外的信息
- 4.2.5 直接转向JNI
- 4.2.6 扫描函数scanFile
- 4.2.7 JNI中的异常处理
- 4.3 分析JNI层
- 4.3.1 将Native对象的指针保存到Java对象
- 4.3.2 创建Native层的MediaScanner对象
- 4.4 Native(本地)层
- 4.4.1 注册JNI函数
- 4.4.2 完成注册工作
- 4.4.3 动态注册
- 4.4.4 处理路径参数
- 4.4.5 扫描文件
- 4.4.6 添加TAG信息
- 4.4.7 总结函数JNI_OnLoad()与函数JNI_OnUnload()的用途
- 4.4.8 Java与JNI基本数据类型转换
- 4.4.9 JNIEnv接口
- 4.4.10 JNI中的环境变量
- 第5章 分析内存系统
- 5.1 分析Android的进程通信机制
- 5.1.1 Android的进程间通信(IPC)机制Binder
- 5.1.2 Service Manager是Binder机制的上下文管理者
- 5.1.3 Service Manager服务
- 5.2 匿名共享内存子系统详解
- 5.2.1 基础数据结构
- 5.2.2 初始化处理
- 5.2.3 打开匿名共享内存设备文件
- 5.2.4 内存映射
- 5.2.5 读写操作
- 5.2.6 锁定和解锁
- 5.2.7 回收内存块
- 5.3 C++访问接口层详解
- 5.3.1 接口MemoryBase
- 5.3.2 接口MemoryBase
- 5.4 Java访问接口层详解
- 第6章 Android程序的生命周期管理
- 6.1 Android程序的生命周期
- 6.1.1 进程和线程
- 6.1.2 进程的类型
- 6.2 Activity的生命周期
- 6.2.1 Activity的几种状态
- 6.2.2 分解剖析Activity
- 6.2.3 几个典型的场景
- 6.2.4 管理Activity的生命周期
- 6.2.5 Activity的实例化与启动
- 6.2.6 Activity的暂停与继续
- 6.2.7 Activity的关闭/销毁与重新运行
- 6.2.8 Activity的启动模式
- 6.3 进程与线程
- 6.3.1 进程
- 6.3.2 线程
- 6.3.3 线程安全的方法
- 6.3.4 Android的线程模型
- 6.4 测试生命周期
- 6.5 Service的生命周期
- 6.5.1 Service的基本概念和用途
- 6.5.2 Service的生命周期详解
- 6.5.3 Service与Activity通信
- 6.6 Android广播的生命周期
- 6.6.1 Android 的广播机制
- 6.6.2 编写广播程序
- 6.7 ART进程管理
- 第7章 IPC进程通信机制
- 7.1 Binder机制概述
- 7.2 Service Manager是Binder机制的上下文管理者
- 7.2.1 入口函数
- 7.2.2 打开Binder设备文件
- 7.2.3 创建设备文件
- 7.2.4 管理内存映射地址空间
- 7.2.5 发生通知
- 7.2.6 循环等待
- 7.3 内存映射
- 7.3.1 实现内存分配功能
- 7.3.2 分配物理内存
- 7.3.3 释放物理页面
- 7.3.4 分配内核缓冲区
- 7.3.5 释放内核缓冲区
- 7.3.6 查询内核缓冲区
- 第8章 init进程详解
- 8.1 init基础
- 8.2 分析入口函数
- 8.3 配置文件详解
- 8.3.1 init.rc简介
- 8.3.2 分析init.rc的过程
- 8.4 解析service
- 8.4.1 Zygote对应的service action
- 8.4.2 init组织service
- 8.4.3 函数parse_service和parse_line_service
- 8.5 字段on
- 8.5.1 Zygote对应的on action
- 8.5.2 init组织on
- 8.5.3 解析on用到的函数
- 8.6 在init控制service
- 8.6.1 启动Zygote
- 8.6.2 启动service
- 8.6.3 4种启动service的方式
- 8.7 控制属性服务
- 8.7.1 引入属性
- 8.7.2 初始化属性服务
- 8.7.3 启动属性服务
- 8.7.4 处理设置属性的请求
- 第9章 Dalvik VM的进程系统
- 9.1 Zygote(孕育)进程详解
- 9.1.1 Zygote基础
- 9.1.2 分析Zygote的启动过程
- 9.2 System进程详解
- 9.2.1 启动System进程前的准备工作
- 9.2.2 分析SystemServer
- 9.2.3 分析EntropyService
- 9.2.4 分析DropBoxManagerService
- 9.2.5 分析DiskStatsService
- 9.2.6 分析DeviceStorageManagerService
- 9.2.7 分析SamplingProfilerService
- 9.2.8 分析ClipboardService
- 9.3 应用程序进程详解
- 9.3.1 创建应用程序
- 9.3.2 启动线程池
- 9.3.3 创建信息循环
- 第10章 Dalvik VM运作流程详解
- 10.1 Dalvik VM相关的可执行程序
- 10.1.1 dalvikvm、dvz和app_process简介
- 10.1.2 对比app_process和dalvikvm的执行过程
- 10.2 初始化Dalvik虚拟机
- 10.2.1 开始虚拟机的准备工作
- 10.2.2 初始化跟踪显示系统
- 10.2.3 初始化垃圾回收器
- 10.2.4 初始化线程列表和主线程环境参数
- 10.2.5 分配内部操作方法的表格内存
- 10.2.6 初始化虚拟机的指令码相关的内容
- 10.2.7 分配指令寄存器状态的内存
- 10.2.8 分配指令寄存器状态的内存和最基本用的Java库
- 10.2.9 初始化使用的Java类库线程类
- 10.2.10 初始化虚拟机使用的异常Java类库
- 10.2.11 初始化其他对象
- 10.3 启动Zygote
- 10.3.1 在init.rc中配置Zygote启动参数
- 10.3.2 启动Socket服务端口
- 10.3.3 加载preload-classes
- 10.3.4 加载preload-resources
- 10.3.5 使用folk启动新进程
- 10.4 启动SystemServer进程
- 10.4.1 启动各种系统服务线程
- 10.4.2 启动第一个Activity
- 10.5 加载class类文件
- 10.5.1 DexFile在内存中的映射
- 10.5.2 ClassObject——Class在加载后的表现形式
- 10.5.3 加载Class并生成相应ClassObject的函数
- 10.5.4 加载基本类库文件
- 10.5.5 加载用户类文件
- 第11章 DEX文件详解
- 11.1 DEX文件介绍
- 11.2 DEX文件的格式
- 11.2.1 map_list
- 11.2.2 string_id_item
- 11.2.3 type_id_item
- 11.2.4 proto_id_item
- 11.2.5 ield_id_item
- 11.2.6 method_id_item
- 11.2.7 class_def_item
- 11.3 DEX文件结构
- 11.3.1 文件头(File Header)
- 11.3.2 魔数字段
- 11.3.3 检验码字段
- 11.3.4 SHA-1签名字段
- 11.3.5 map_off字段
- 11.3.6 string_ids_size和off字段
- 11.4 DEXFile接口详解
- 11.4.1 构造函数
- 11.4.2 公共方法
- 11.5 DEX和动态加载类机制
- 11.5.1 类加载机制
- 11.5.2 具体加载
- 11.5.3 代码加密
- 11.6 动态加载jar和DEX
- 第12章 Dvlik VM内存系统详解
- 12.1 如何分配内存
- 12.2 内存管理机制详解
- 12.3 优化Dalvik虚拟机的堆内存分配
- 第13章 Dalvik VM垃圾收集机制
- 13.1 引用计数算法
- 13.2 Mark Sweep算法
- 13.3 和垃圾收集算法有关的函数
- 13.4 垃圾回收的时机
- 13.5 调试信息
- 13.6 Dalvik VM和JVM垃圾收集机制的区别
- 第14章 Dalvik VM内存优化机制详解
- 14.1 sp和wp简介
- 14.1.1 sp基础
- 14.1.2 wp基础
- 14.2 智能指针详解
- 14.2.1 智能指针基础
- 14.2.2 轻量级指针
- 14.2.3 强指针
- 14.2.4 弱指针
- 第15章 分析Dalvik VM的启动过程
- 15.1 Dalvik VM启动流程概览
- 15.2 Dalvik VM启动过程详解
- 15.2.1 创建Dalvik VM实例
- 15.2.2 指定一系列控制选项
- 15.2.3 创建并初始化Dalvik VM实例
- 15.2.4 创建JNIEnvExt对象
- 15.2.5 设置当前进程和进程组ID
- 15.2.6 注册Android核心类的JNI方法
- 15.2.7 创建javaCreateThreadEtc钩子
- 第16章 注册Dalvik VM并创建线程
- 16.1 注册Dalvik VM的JNI方法
- 16.1.1 设置加载程序
- 16.1.2 加载so文件并验证
- 16.1.3 获取描述类
- 16.1.4 注册JNI方法
- 16.1.5 实现JNI操作
- 16.2 创建Dalvik VM进程
- 16.2.1 分析底层启动过程
- 16.2.2 创建Dalvik VM进程
- 16.2.3 初始化运行的Dalvik VM
- 16.3 创建Dalvik VM线程
- 16.3.1 检查状态值
- 16.3.2 创建线程
- 16.3.3 分析启动过程
- 16.3.4 清理线程
- 第17章 Dalvik VM异常处理详解
- 17.1 Java异常处理机制
- 17.1.1 方法调用栈
- 17.1.2 Java提供的异常处理类
- 17.2 Java VM异常处理机制详解
- 17.2.1 Java语言及虚拟机的异常处理机制
- 17.2.2 COSIX虚拟机异常处理的设计与实现
- 17.3 分析Dalvik虚拟机异常处理的源码
- 17.3.1 初始化虚拟机使用的异常Java类库
- 17.3.2 抛出一个线程异常
- 17.3.3 持续抛出进程
- 17.3.4 找出异常原因
- 17.3.5 找出异常原因
- 17.3.6 清除挂起的异常和等待初始化的异常
- 17.3.7 包装“现在等待”异常的不同例外
- 17.3.8 输出跟踪当前异常的错误信息
- 17.3.9 搜索和当前异常相匹配的方法
- 17.3.10 获取匹配的捕获块
- 17.3.11 进行堆栈跟踪
- 17.3.12 生成堆栈跟踪元素
- 17.3.13 将内容添加到堆栈跟踪日志中
- 17.3.14 将内容添加到堆栈跟踪日志中
- 17.4 常见异常的类型与原因
- 17.4.1 SQLException:操作数据库异常类
- 17.4.2 ClassCastException:数据类型转换异常
- 17.4.3 NumberFormatException:字符串转换为数字类型时抛出的异常
- 17.5 调用堆栈跟踪分析异常
- 17.5.1 解决段错误
- 17.5.2 跟踪Android Callback调用堆栈
- 第18章 JIT编译
- 18.1 JIT简介
- 18.1.1 JIT概述
- 18.1.2 Java虚拟机主要的优化技术
- 18.1.3 Dalvik中JIT的实现
- 18.2 Dalvik VM对JIT的支持
- 18.3 汇编代码和改动
- 18.3.1 汇编部分代码
- 18.3.2 对C文件的改动
- 18.4 Dalvik VM中的JIT源码
- 18.4.1 入口文件
- 18.4.2 核心函数
- 18.4.3 编译文件
- 18.4.4 BasicBlock处理
- 18.4.5 内存初始化
- 18.4.6 对JIT源码的总结
- 第19章 Dalvik VM内存优化
- 19.1 Android内存优化的作用
- 19.2 查看Android内存和CPU使用情况
- 19.2.1 利用Android API函数查看
- 19.2.2 直接对Android文件进行解析查询
- 19.2.3 通过Runtime类实现
- 19.2.4 使用DDMS工具获取
- 19.2.5 其他方法
- 19.3 Android的内存泄露
- 19.3.1 什么是内存泄漏
- 19.3.2 为什么会发生内存泄露
- 19.3.3 shallow size、retained size
- 19.3.4 查看Android内存泄露的工具——MAT
- 19.3.5 查看Android内存泄露的方法
- 19.3.6 Android(Java)中常见的容易引起内存泄漏的不良代码
- 19.4 常见的引起内存泄露的坏习惯
- 19.4.1 查询数据库时忘记关闭游标
- 19.4.2 构造Adapter时不习惯使用缓存的convertView
- 19.4.3 没有及时释放对象的引用
- 19.4.4 不在使用Bitmap对象时调用recycle()释放内存
- 19.5 解决内存泄露实践
- 19.5.1 使用MAT根据heap dump分析Java代码内存泄漏的根源
- 19.5.2 演练Android中内存泄露代码优化及检测
- 第20章 Dalvik VM性能优化
- 20.1 加载APK/DEX文件优化
- 20.1.1 APK文件介绍
- 20.1.2 DEX文件优化
- 20.1.3 使用类动态加载技术实现加密优化
- 20.2 SD卡优化
- 20.3 虚拟机优化详解
- 20.3.1 平台优化—ARM的流水线技术
- 20.3.2 Android对C库优化
- 20.3.3 优化创建的进程
- 20.3.4 渲染优化
- 第21章 分析ART的启动过程
- 21.1 运行环境的转换
- 21.2 运行 app_process 进程
- 21.3 准备启动
- 21.4 创建运行实例
- 21.5 注册本地JNI函数
- 21.6 启动守护进程
- 21.7 解析参数
- 21.8 初始化类、方法和域
- 第22章 执行ART主程序
- 22.1 进入main主函数
- 22.2 查找目标类
- 22.2.1 函数LookupClass()
- 22.2.2 函数DefineClass()
- 22.2.3 函数InsertClass()
- 22.2.4 函数LinkClass()
- 22.3 类操作
- 22.4 实现托管操作
- 第23章 安装APK应用程序
- 23.1 PackageManagerService概述
- 23.2 主函数main
- 23.3 调用初始化函数
- 23.4 创建PackageManagerService服务
- 23.5 扫描并解析
- 23.6 保存解析信息
- 第24章 ART环境安装APK应用程序
- 24.1 Android安装APK概述
- 24.2 启动时安装
- 24.3 ART安装
- 24.4 实现dex2oat转换
- 24.4.1 参数解析
- 24.4.2 创建 OAT 文件指针
- 24.4.3 dex2oat 准备工作
- 24.4.4 提取 classes.dex 文件
- 24.4.5 创建 OAT 文件
- 24.5 APK 文件的转换
- 读书笔记
- 欢迎来到异步社区!
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。