封面
版权信息
前言
第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++11
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和VisitInstanceFieldGet
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 RegisterRuntimeNativeMethods
8.4.3 WellKnownClasses Init和LastInit
8.5 Thread相关
8.5.1 Runtime InitThreadGroups
8.5.2 Thread FinishSetup
8.5.3 Runtime StartDaemonThreads
8.6 Runtime CreateSystemClassLoader
8.7 类的加载、链接和初始化
8.7.1 关键类介绍
8.7.2 SetupClass
8.7.3 LoadClass相关函数
8.7.4 LinkClass相关函数
8.7.5 DefineClass
8.7.6 Verify相关函数
8.7.7 Initialize相关函数
8.7.8 ClassLinker中其他常用函数
8.7.9 ClassLoader介绍
8.8 虚拟机创建和启动关键内容梳理
第9章 深入理解dex2oat
9.1 概述
9.2 ParseArgs介绍
9.2.1 CompilerOptions类介绍
9.2.2 ProcessOptions函数介绍
9.2.3 InsertCompileOptions函数介绍
9.3 OpenFile介绍
9.4 Setup介绍
9.4.1 Setup代码分析之一
9.4.2 Setup代码分析之二
9.4.3 Setup代码分析之三
9.4.4 Setup代码分析之四
9.5 CompileImage
9.5.1 Compile
9.5.2 ArtCompileDEX
9.5.3 OptimizingCompiler JniCompile
9.5.4 OptimizingCompiler Compile
9.6 OAT和ART文件格式介绍
9.6.1 OAT文件格式
9.6.2 ART文件格式
9.6.3 oatdump介绍
9.7 总结
第10章 解释执行和JIT
10.1 基础知识
10.1.1 LinkCode
10.1.2 Runtime ArtMethod
10.1.3 栈和参数传递
10.2 解释执行
10.2.1 art_quick_to_interpreter_bridge
10.2.2 artQuickToInterpreterBridge
10.2.3 EnterInterpreterFromEntryPoint
10.2.4 调用栈的管理和遍历
10.3 ART中的JIT
10.3.1 Jit、JitCodeCache等
10.3.2 JIT阈值控制与处理
10.3.3 OSR的处理
10.4 HDeoptimize的处理
10.4.1 VisitDeoptimize相关
10.4.2 QuickExceptionHandler相关
10.4.3 解释执行中关于Deoptimize的处理
10.5 Instrumentation介绍
10.5.1 MethodEnterEvent和MethodExitEvent
10.5.2 DexPcMovedEvent
10.6 异常投递和处理
10.6.1 抛异常
10.6.2 异常处理
10.7 总结
第11章 ART中的JNI
11.1 JavaVM和JNIEnv
11.1.1 JavaVMExt相关介绍
11.1.2 JNIEnvExt介绍
11.2 Java native方法的调用
11.2.1 art_jni_dlsym_lookup_stub
11.2.2 art_quick_generic_jni_trampoline
11.3 CallStaticVoidMethod
11.4 JNI中引用型对象的管理
11.4.1 关键类介绍
11.4.2 JniMethodStart和JniMethodEnd
11.4.3 IndirectReferenceTable相关函数
11.4.4 NewObject和jobject的含义
11.4.5 JNI中引用对象相关
11.4.6 PushLocalFrame和PopLocalFrame
11.4.7 回收引用对象
11.5 总结
第12章 CheckPoints、线程同步及信号处理
12.1 CheckPoints介绍
12.1.1 设置Check Point标志位
12.1.2 Check Points的设置
12.1.3 执行检查点处的任务
12.2 ThreadList和ThreadState
12.2.1 线程ID
12.2.2 RunCheckpoint和Dump
12.2.3 SuspendAll和ResumeAll
12.2.4 Thread状态切换
12.3 线程同步相关知识
12.3.1 关键类介绍
12.3.2 synchronized的处理
12.3.3 Object wait、notifyAll等
12.4 volatile成员的读写
12.4.1 基础知识
12.4.2 解释执行模式下的处理
12.4.3 机器码执行模式的处理
12.5 信号处理
12.5.1 zygote进程的处理
12.5.2 非zygote进程的处理
12.6 总结
第13章 内存分配与释放
13.1 Space等关键类介绍
13.2 ZygoteSpace
13.3 BumpPointerSpace和RegionSpace
13.3.1 BumpPointerSpace
13.3.2 RegionSpace
13.4 DlMallocSpace和RosAllocSpace
13.4.1 DlMallocSpace
13.4.2 RosAllocSpace
13.4.3 rosalloc介绍
13.5 LargeObjectMapSpace
13.6 new-instance/array指令的处理
13.6.1 设置内存分配器
13.6.2 解释执行模式下的处理
13.6.3 机器码执行模式下的处理
13.6.4 Heap AllocObjectWithAllocator
13.7 细观Space
13.7.1 Space类
13.7.2 ContinuousSpace和DiscontinuousSpace类
13.7.3 MemMapSpace和ContinuousMemMapAllocSpace类
13.7.4 MallocSpace类
13.8 Heap学习之二
13.8.1 Heap构造函数
13.8.2 关键类介绍
13.8.3 ObjectVisitReferences
13.9 总结
第14章 ART中的GC
14.1 GC基础知识
14.1.1 Mark-Sweep Collection原理介绍
14.1.2 Copying Collection原理介绍
14.1.3 Mark-Compact Collection原理介绍
14.1.4 其他概念
14.2 Runtime VisitRoots
14.2.1 关键数据结构
14.2.2 Thread VisitRoots
14.3 ART GC概览
14.3.1 关键数据结构
14.3.2 ART GC选项
14.3.3 创建回收器和设置回收策略
14.4 MarkSweep
14.4.1 Heap相关成员变量取值情况
14.4.2 MarkSweep概貌
14.4.3 MarkingPhase
14.4.4 PausePhase
14.4.5 ReclaimPhase
14.4.6 FinishPhase
14.4.7 PartialMarkSweep
14.4.8 StickyMarkSweep
14.4.9 Concurrent MarkSweep
14.4.10 Parallel GC
14.4.11 MarkSweep小结
14.5 ConcurrentCopying
14.5.1 InitalizePhase
14.5.2 FlipThreadRoots
14.5.3 MarkingPhase
14.5.4 ReclaimPhase
14.5.5 ConcurrentCopying小结
14.6 MarkCompact
14.6.1 MarkingPhase
14.6.2 ReclaimPhase
14.6.3 MarkCompact小结
14.7 SemiSpace
14.7.1 InitializePhase
14.7.2 MarkingPhase
14.7.3 SemiSpace小结
14.8 Java Reference对象的处理
14.8.1 基础知识
14.8.2 MarkSweep中Reference对象的处理
14.8.3 ReferenceProcessor
14.8.4 PhantomReference的处理
14.8.5 finalize函数的调用
14.8.6 Reference处理小结
14.9 Heap学习之三
14.9.1 Heap Trim
14.9.2 CollectGarbageInternal
14.9.3 PreZygoteFork
14.9.4 内存碎片的解决
14.10 总结
14.11 参考资料
更新时间:2019-04-22 18:13:01