![]()
内容推荐 邓凡平著的《深入理解Android(Java虚拟机ART)》是一部从源码角度分析和讲解Androld虚拟机ART的鸿篇巨著,核心内容和价值体现在3个方面: 第一,细致、深入地分析了ART虚拟机的架构、设计与实现原理,能让读者对ART虚拟机有透彻了解; 第二,能让Android系统工程师和应用工程师从底层了解整个Android系统的运行机理,从而写出更高质量的应用; 第三,Java虚拟机是一个“庞然大物”,学习和理解的门槛较高,ART是迄今应用最为广泛的JVM实现,本书为读者学习JVM提供了独特的视角和更为容易的路径。 全书共14章: 第1章介绍了在学习ART虚拟机前需要准备的工具和环境,以及本书的内容结构和阅读注意事项,建议仔细读和反复读; 第2~4章详细讲解了Class文件、dex文件和ELF文件的格式和内容,理解Class文件是学习JVM的第一步,dex和ELF是学习Dalvik虚拟机和ART虚拟机的前提和基础; 第5章详细讲解了ART虚拟机的实现语言C++11,是阅读ART源代码必备的知识; 第6~8章详细讲解了ART虚拟机中与编译和Runtlme相关的大量知识,这是虚拟机的核心和难点; 第9章详细讲解了dex字节码转机器码的核心进程dex2oat以及.oat和.art的文件格式; 第10~11章详细讲解了虚拟机的解释执行、JIT部分以及异常的投递和处理过程,以及JNI在ART虚拟机中的实现。 第12~14章详细讲解了虚拟机中Java线程的执行、内存分配和释放、垃圾回收的原理与实现。 本书是经典丛书“深入理解Android”系列的第8本,继承了该系列图书严谨、细致、深入、编排考究的优点,相信所有Android工程师和Java工程师都能从中受益。 作者简介 邓凡平,资深Android技术专家,国内早期从事Android技术研究和开发的工程师之一。从底层的虚拟机,到中间的系统层和框架层,再到上层的各种应用,他对整个Android系统的源代码有非常深入的研究和理解。他策划并撰写了“深入理解Android”系列图书(目前已出版8本),累计销量超过10万册,是广大Android工程师系统、深入了解Android系统源代码的首选。 目前就职于民生银行总行信息科技部创新技术研究院,钻研和探索物联网等新技术在金融领域中的应用。曾就职于索尼移动,担任资深软件架构师。 已出版著作: 《深入理解Android:卷Ⅰ》(2011年) 《深入理解Android:卷Ⅱ》(2012年) 《深入理解Android:Wi-Fi、NFC和GPS卷》(2014年) 目录 推荐序 前言 第1章 本书必读 1.1 概述 1.2 准备环境和工具 1.2.1 准备源代码 1.2.2 准备Source Insight 1.2.3 准备模拟器和自制系统镜像 1.2.4 小结 1.3 本书的内容 1.4 本书资源下载说明 第2章 深入理解Class文件格式 2.1 Class文件格式总览 2.2 常量池及相关内容 2.2.1 常量项的类型和关系 2.2.2 信息描述规则 2.2.3 常量池实例剖析 2.3 field_info和method_info 2.4 access_flags介绍 2.5 属性介绍 2.5.1 属性概貌 2.5.2 Code属性 2.5.3 LineNumberTable属性 2.5.4 LocalVariableTable属性 2.6 Java指令码介绍 2.6.1 指令码和助记符 2.6.2 如何阅读规范 2.7 学习路线推荐 2.8 参考资料 第3章 深入理解Dex文件格式 3.1 Dex文件格式总览 3.1.1 Dex和Class文件格式的区别 3.1.2 Dex文件格式的概貌 3.2 认识Dex文件 3.2.1 header_item 3.2.2 string_id_item等 3.2.3 class_def 3.2.4 code_item 3.3 Dex指令码介绍 3.3.1 insns的组织形式 3.3.2 指令码描述规则 3.4 学习路线推荐 3.5 参考资料 第4章 深入理解ELF文件格式 4.1 概述 4.2 ELF文件格式介绍 4.2.1 ELF文件头结构介绍 4.2.2 Linking View下的ELF 4.2.3 Execution View下的ELF 4.2.4 实例分析:调用动态库中的函数 4.2.5 ELF总结 4.3 学习路线推荐 4.4 参考资料 第5章 认识C++ 5.1 数据类型 5.1.1 基本内置数据类型介绍 5.1.2 指针、引用和void类型 5.1.3 字符和字符串 5.1.4 数组 5.2 C++源码构成及编译 5.2.1 头文件示例 5.2.2 源文件示例 5.2.3 编译 5.3 Class介绍 5.3.1 构造、赋值和析构函数 5.3.2 类的派生和继承 5.3.3 友元和类的前向声明 5.3.4 explicit构造函数 5.3.5 C++中的struct 5.4 操作符重载 5.4.1 操作符重载的实现方式 5.4.2 输出和输入操作符重载 5.4.3 -)和*操作符重载 5.4.4 new和delete操作符重载 5.4.5 函数调用运算符重载 5.5 函数模板与类模板 5.5.1 函数模板 5.5.2 类模板 5.6 lambda表达式 5.7 STL介绍 5.7.1 string类 5.7.2 容器类 5.7.3 算法和函数对象介绍 5.7.4 智能指针类 5.7.5 探讨STL的学习 5.8 其他常用知识 5.8.1 initializer_list 5.8.2 带作用域的enum 5.8.3 constexpr 5.8.4 static_assert 5.9 参考资料 第6章 编译dex字节码为机器码 6.1 编译器全貌介绍 6.2 编译器前端介绍 6.2.1 词法分析和lex 6.2.2 语法分析和yacc 6.2.3 语义分析和IR生成介绍 6.3 优化器介绍 6.3.1 构造CFG 6.3.2 分析和处理CFG 6.3.3 数据流分析与SSA 6.3.4 IR优化 6.4 ART中的IR—HInstruction 6.4.1 ART中的IR 6.4.2 IR之间的关系 6.4.3 ART IR对象的初始化 6.5 寄存器分配 6.5.1 LSRA介绍 6.5.2 LSRA相关代码介绍 6.6 机器码生成相关代码介绍 6.6.1 GenerateFrameEntry 6.6.2 VisitAdd和VisitInstance-FieldGet 6.6.3 GenerateSlowPaths 6.7 总结 6.8 参考资料 第7章 虚拟机的创建 7.1 概述 7.1.1 JniInvocation Init函数介绍 7.1.2 AndroidRuntime startVm函数介绍 7.2 Runtime Create介绍 7.2.1 Create函数介绍 7.2.2 Init函数介绍 7.3 MemMap与OatFileManager 7.3.1 MemMap介绍 7.3.2 OatFileManager介绍 7.4 FaultManager介绍 7.4.1 信号处理和SignalAction介绍 7.4.2 FaultManager介绍 7.5 Thread介绍 7.5.1 Startup函数介绍 7.5.2 Attach函数介绍 7.6 Heap学习之一 7.6.1 初识Heap中的关键类 7.6.2 Heap构造函数第一部分 7.7 JavaVMExt和JNIEnvExt 7.7.1 JavaVMExt 7.7.2 JNIEnvExt 7.7.3 总结 7.8 ClassLinker 7.8.1 关键类介绍 7.8.2 ClassLinker构造函数 7.8.3 InitFromBootImage 7.8.4 ClassLinker总结 7.9 总结和阅读指导 第8章 虚拟机的启动 8.1 Runtime Start 8.2 初识JNI 8.2.1 JNI中的数据类型 8.2.2 ScopedObjectAccess等辅助类 8.2.3 常用JNI函数介绍 8.3 Jit LoadCompilerLibrary 8.4 Runtime InitNativeMethods 8.4.1 JniConstants Init 8.4.2 RegisterRuntimeNative Methods 8.4.3 WellKnownClasses Init和LastInit 8.5 Thread相关 8.5.1 Runtime I |