展开全部

主编推荐语

掌握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日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。