前言

本书主要内容及特色

本书是笔者“深入理解Android”系列的第四本。本书将关注Android系统中至关重要的部分——Java虚拟机ART。市面上介绍Java虚拟机的书籍非常多,但鲜少有书籍能从虚拟机源代码出发对其进行详细分析。随着Android设备的大规模普及,ART虚拟机已经成为当今使用最为广泛的JVM之一。所以,对ART虚拟机进行研究有着非同寻常的意义。本书的出现在一定程度上填补了这方面的空白。

本书的主要内容概述如下:

·第1章介绍ART虚拟机学习前需要准备好的工具、环境等。

·第2章介绍Class文件的格式及内容。

·第3章介绍Android中Dex文件的格式。

·第4章介绍ELF文件格式。

·第5章介绍C++11相关的、能帮助读者阅读ART源码的必备知识。

·第6章以编译原理为基础,介绍ART虚拟机编译相关的知识。

·第7章以ART Runtime对象的创建为主线,介绍主要的模块及一些关键类、数据结构等知识。

·第8章以ART Runtime的Start为主线进行分析,覆盖的内容包括相关模块的启动、类的解析、加载、链接、初始化等。

·第9章介绍dex字节码转机器码的核心进程dex2oat以及.oat和.art文件格式。

·第10章介绍虚拟机的解释执行和JIT部分以及异常的投递和处理的过程。

·第11章介绍JNI在ART虚拟机的实现。

·第12章介绍虚拟机Java线程执行相关的知识,包括线程暂停和恢复运行、synchronized、Object wait/notify的实现、volatile变量的读写处理等。

·第13章介绍内存分配和释放相关的知识。包括ART虚拟机中的各种Space类型、new指令的实现以及ART虚拟机中Heap模块的部分内容。

·第14章介绍和垃圾回收有关的基础知识以及相关垃圾回收器,还有Java Reference的处理以及Heap模块的部分内容。

本书通过理论和代码相结合的方式进行讲解,旨在引领读者一步步了解Android系统中JVM的工作原理。

读者对象

·Android系统开发工程师

系统开发工程师常常需要深入理解Android平台上各个系统的运转过程。本书所涉及的Java虚拟机是从事相关工作的读者在工作和学习中最想了解的。

·Android应用开发工程师

Android应用开发工程师所开发的程序是运行在JVM中的。如果能更深入地了解JVM的实现将极大帮助开发工程师写出更高质量的程序。

·对JVM感兴趣的在校高年级本科生、研究生等研究人员

JVM的理论书籍非常多,但很少有从分析源代码的角度来介绍其工作原理的。这本理论与代码实现深度结合的书籍一定可在该领域助相关研究人员一臂之力。

如何阅读本书

本书是一本有一定深度的书籍,所以读者在阅读时:

请务必首先阅读第1章。后续如果碰到阅读上的困难,可能还需时常回顾第1章。

本书的内容是经过笔者精心编排的,如果读者不是很有把握的话,建议严格按照顺序阅读。

本书的某些章节涉及了笔者在撰写它们时所参考的资料。这些资料较多,读者可根据它们开展进一步的研究工作。

另外,和笔者之前出版的《深入理解Android》卷Ⅰ以及卷Ⅱ类似的是:本书在每章开头都把本章涉及的源码路径全部列出,而在具体分析源码时,则只列出该源码的文件名及所分析的函数或相关数据结构名。例如:

[AndroidRuntime.cpp->AndroidRuntime::start]

//这里是源码分析和一些注释

最后,本书在描述类之间的关系及函数调用流程上,使用了UML的静态类图及序列图。UML是一个强大的工具,但它的建模规范过于繁琐,为更简单清晰地描述事情的本质,本书并未完全遵循UML的建模规范。这里仅举两例,如图1和图2所示。

在图1中:

·外部类内部的方框用于表示内部类。另外,外部类A、内部类B也用于表示内部类。

·接口和普通类用同一种框图表示。

图2所示为本书描述数据结构时使用的UML图。

图1 UML示例图之一

图2 UML示例图之二

图2为本书描述数据结构及成员时使用的UML图例。

特别注意 本书使用的UML图都比较简单,读者不必花费大量时间专门学习UML。另外,出于方便考虑,本书所绘制的UML图没有严格遵守UML规范。这一点敬请读者谅解。

本书涉及的Android源码及一些开发工具的下载可通过笔者的博客blog.csdn.net/innost首页置顶文章“深入理解Android系列书籍资源分享更新”查看。关于它们的使用详情,请读者阅读本书第1章了解。

勘误和支持

由于作者的水平有限,加之编写时间仓促,书中难免会出现一些错误或不准确的地方,恳请读者不吝赐教。若有问题,可通过邮件或在博客上留言与笔者共同商讨。笔者的联系方式如下:

·邮箱fanping.deng@gmail.com

·博客blog.csdn.net/innost

致谢

本书的顺利出版首先要感谢杨福川编辑的大力支持。另外,要感谢张锡鹏编辑在审稿期间严谨负责的工作。

另外,笔者需要特别感谢现就职的民生银行总行信息科技部。这是笔者第一次供职于一家金融企业。在此工作的这段时间里,我深刻体会到了民生科技人勇于开拓、锐意创新的精神气质,同时也感受到“金融科技为银行创造价值”的深远意义和重大责任。在此,笔者借助本书对相关领导和同事表示衷心的感谢。他们是牛新庄、毛斌、李建兵、林冠峰、李彧、娄丽明、侯佳腾、常薇、王连诚、张梦涵、侯超、金西银、孙升芸、孟凡娇、文静、赖穆彬等。正是你们的鼓励、支持和信任才使我的业余研究成果得以成书。

当然,本书能快速出版,还需要感谢几位功力深厚并热心参与技术审稿的专家。他们是滴滴出行资深研发工程师孙鹏飞和赵旭阳、高通无线半导体技术有限公司资深工程师钟长庚。几位专家在各自领域所体现出来的专业素养和技术水平之高时刻提醒笔者应牢记“路漫漫其修远兮,吾将上下而求索”。另外,其他几位小伙伴罗迪、段启智、高建武、陈永志也对本书的编写提供了不小的帮助。在此一并感谢他们。

最后,一如既往地感谢家人和妻子。另外,特别感谢索菲娅小朋友,正是她不厌其烦地问“爸爸,你为什么看电脑呀”,才使得笔者不得不加快编写速度。最后,感谢所有花费宝贵时间和精力关注本书的读者以及所有在人生和职业道路上曾给予我指导的诸位师长。

邓凡平

北京