深入理解Android:Java虚拟机ART_第1页
深入理解Android:Java虚拟机ART_第2页
深入理解Android:Java虚拟机ART_第3页
深入理解Android:Java虚拟机ART_第4页
深入理解Android:Java虚拟机ART_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深入理解Android:Java虚拟机ART读书笔记模板01思维导图读书笔记目录分析内容摘要精彩摘录作者介绍目录0305020406思维导图虚拟机虚拟机研究关注系统部分类函数处理第章介绍对象参考资料文件格式设置小结相关文件构造函数本书关键字分析思维导图内容摘要内容摘要本书是**“深入理解Android”系列的第四本。本书将**Android系统中至关重要的部分——Java虚拟机ART。随着Android设备的大规模普及,ART虚拟机已经成为当今使用最为广泛的JVM之一。所以,对ART虚拟机进行研究有着非同寻常的意义。本书的出现在一定程度上填补了这方面的空白。读书笔记读书笔记为数不多能从源码角度去分析art原理的书籍,看出作者确实下了很大的功夫。虽然是基于android系统分析,但可以作为jvm非常好的学习资料,是目前最有广度深度的资料。这是一部从源代码角度分析和讲解Android虚拟机ART的鸿篇巨著,核心内容和价值体现在3个方面:首先,细致、深入地分析了ART虚拟机的架构、设计与实现原理,能让读者对ART虚拟机有透彻了解;第二,能让Andriod系统工程师和应用工程师从底层了解整个Android系统的运行机理,从而写出更高质量的应用;第三,Java虚拟机是一个“庞然大物”,学习和理解的门槛较高,ART是迄今应用广泛的JVM实现,本书为读者学习JVM提供了独特的视角和更为容易的路径。精彩摘录精彩摘录如果一个Class文件依赖另外一个Class文件,则虚拟机在处理的时候需要读取另外一个Class文件的内容,这可能会导致CPU和存储设备进行更多的I/O操作。而classes.dex由于一个文件就包含了所有的信息,相对而言会减少I/O操作的次数。一个Class文件对应一个Java源码文件,而一个Dex文件可对应多个Java源码文件。Dex文件是Android平台上和传统Class文件对应的Java字节码文件。Dex文件的核心内容其实与传统Class文件类似,只不过针对移动设备做了一些定制化处理MethodDescriptor不包括函数名。这么做的目的其实也是为了节省空间对比Linux、Windows上的可执行文件而言,Class文件可以看作是Java虚拟机的可执行文件。对ART虚拟机而言,其编译模块没有包含Frontend,因为从Java源代码到Dex字节码的前端工作是在APP开发过程中由Java编译器、dex工具完成的在JVM规范中,指令码的长度是1个字节。所以JVM规范中定义的Java指令码的个数不会超过255个(255的16进制表示为0xFF)。目录分析1.1概述1.2准备环境和工具1.3本书的内容1.4本书资源下载说明第1章本书必读1.2准备环境和工具1.2.1准备源代码1.2.2准备SourceInsight1.2.3准备模拟器和自制系统镜像1.2.4小结2.1Class文件格式总览2.2常量池及相关内容2.3field_info和method_info2.4access_flags介绍第2章深入理解Class文件格式2.5属性介绍2.6Java指令码介绍2.7学习路线推荐2.8参考资料第2章深入理解Class文件格式2.2常量池及相关内容2.2.1常量项的类型和关系2.2.2信息描述规则2.2.3常量池实例剖析2.5属性介绍2.5.1属性概貌2.5.2Code属性2.5.3LineNumberTable属性2.5.4LocalVariableTable属性2.6Java指令码介绍2.6.1指令码和助记符2.6.2如何阅读规范3.1Dex文件格式总览3.2认识Dex文件3.3Dex指令码介绍3.4学习路线推荐3.5参考资料12345第3章深入理解Dex文件格式3.1Dex文件格式总览3.1.1Dex和Class文件格式的区别3.1.2Dex文件格式的概貌3.2认识Dex文件3.2.1header_item3.2.2string_id_item等3.2.3class_def3.2.4code_item3.3Dex指令码介绍3.3.1insns的组织形式3.3.2指令码描述规则4.1概述4.2ELF文件格式介绍4.3学习路线推荐4.4参考资料第4章深入理解ELF文件格式4.2ELF文件格式介绍4.2.1ELF文件头结构介绍4.2.2LinkingView下的ELF4.2.3ExecutionView下的ELF4.2.4实例分析:调用动态库中的函数4.2.5ELF总结5.1数据类型5.2C++源码构成及编译5.3Class介绍5.4操作符重载5.5函数模板与类模板5.6lambda表达式010302040506第5章认识C++115.7STL介绍5.9参考资料5.8其他常用知识第5章认识C++115.1数据类型5.1.1基本内置数据类型介绍5.1.2指针、引用和void类型5.1.3字符和字符串5.1.4数组5.2C++源码构成及编译5.2.1头文件示例5.2.2源文件示例5.2.3编译5.3Class介绍5.3.1构造、赋值和析构函数5.3.2类的派生和继承5.3.3友元和类的前向声明5.3.4explicit构造函数5.3.5C++中的struct5.4操作符重载5.4.1操作符重载的实现方式5.4.2输出和输入操作符重载5.4.3->和*操作符重载5.4.4new和delete操作符重载5.4.5函数调用运算符重载5.5函数模板与类模板5.5.1函数模板5.5.2类模板5.7STL介绍5.7.1string类5.7.2容器类5.7.3算法和函数对象介绍5.7.4智能指针类5.7.5探讨STL的学习5.8其他常用知识5.8.1initializer_list5.8.2带作用域的enum5.8.3constexpr5.8.4static_assert6.1编译器全貌介绍6.2编译器前端介绍6.3优化器介绍6.4ART中的IR—HInstruction第6章编译dex字节码为机器码6.5寄存器分配6.6机器码生成相关代码介绍6.7总结6.8参考资料第6章编译dex字节码为机器码6.2编译器前端介绍6.2.1词法分析和lex6.2.2语法分析和yacc6.2.3语义分析和IR生成介绍6.3优化器介绍6.3.1构造CFG6.3.2分析和处理CFG6.3.3数据流分析与SSA6.3.4IR优化6.4ART中的IR—HInstruction6.4.1ART中的IR6.4.2IR之间的关系6.4.3ARTIR对象的初始化6.5寄存器分配6.5.1LSRA介绍6.5.2LSRA相关代码介绍6.6机器码生成相关代码介绍6.6.1GenerateFrameEntry6.6.2VisitAdd和VisitInstanceFieldGet6.6.3GenerateSlowPaths7.1概述7.2RuntimeCreate介绍7.3MemMap与OatFileManager7.4FaultManager介绍第7章虚拟机的创建7.5Thread介绍7.6Heap学习之一7.7JavaVMExt和JNIEnvExt7.8ClassLinker7.9总结和阅读指导12345第7章虚拟机的创建7.1概述7.1.1JniInvocationInit函数介绍7.1.2AndroidRuntimestartVm函数介绍7.2RuntimeCreate介绍7.2.1Create函数介绍7.2.2Init函数介绍7.3MemMap与OatFileManager7.3.1MemMap介绍7.3.2OatFileManager介绍7.4FaultManager介绍7.4.1信号处理和SignalAction介绍7.4.2FaultManager介绍7.5Thread介绍7.5.1Startup函数介绍7.5.2Attach函数介绍7.6Heap学习之一7.6.1初识Heap中的关键类7.6.2Heap构造函数第一部分7.7JavaVMExt和JNIEnvExt7.7.1JavaVMExt7.7.2JNIEnvExt7.7.3总结7.8ClassLinker7.8.1关键类介绍7.8.2ClassLinker构造函数7.8.3InitFromBootImage7.8.4ClassLinker总结8.1RuntimeStart8.2初识JNI8.3JitLoadCompilerLibrary8.4RuntimeInitNativeMethods8.5Thread相关8.6RuntimeCreateSystemClassLoader010302040506第8章虚拟机的启动8.8虚拟机创建和启动关键内容梳理8.7类的加载、链接和初始化第8章虚拟机的启动8.2初识JNI8.2.1JNI中的数据类型8.2.2ScopedObjectAccess等辅助类8.2.3常用JNI函数介绍8.4RuntimeInitNativeMethods8.4.1JniConstantsInit8.4.2RegisterRuntimeNativeMethods8.4.3WellKnownClassesInit和LastInit8.5Thread相关8.5.1RuntimeInitThreadGroups8.5.2ThreadFinishSetup8.5.3RuntimeStartDaemonThreads8.7类的加载、链接和初始化8.7.1关键类介绍8.7.2SetupClass8.7.3LoadClass相关函数8.7.4LinkClass相关函数8.7.5DefineClass8.7.6Verify相关函数8.7.7Initialize相关函数8.7.8ClassLinker中其他常用函数8.7.9ClassLoader介绍9.1概述9.2ParseArgs介绍9.3OpenFile介绍9.4Setup介绍9.5CompileImage12345第9章深入理解dex2oat9.7总结9.6OAT和ART文件格式介绍第9章深入理解dex2oat9.2ParseArgs介绍9.2.1CompilerOptions类介绍9.2.2ProcessOptions函数介绍9.2.3InsertCompileOptions函数介绍9.4Setup介绍9.4.1Setup代码分析之一9.4.2Setup代码分析之二9.4.3Setup代码分析之三9.4.4Setup代码分析之四9.5CompileImage9.5.1Compile9.5.2ArtCompileDEX9.5.3OptimizingCompilerJniCompile9.5.4OptimizingCompilerCompile9.6OAT和ART文件格式介绍9.6.1OAT文件格式9.6.2ART文件格式9.6.3oatdump介绍10.1基础知识10.2解释执行10.3ART中的JIT10.4HDeoptimize的处理第10章解释执行和JIT10.5Instrumentation介绍10.7总结10.6异常投递和处理第10章解释执行和JIT10.1基础知识10.1.1LinkCode10.1.2RuntimeArtMethod10.1.3栈和参数传递10.2解释执行10.2.1art_quick_to_interpreter_bridge10.2.2artQuickToInterpreterBridge10.2.3EnterInterpreterFromEntryPoint10.2.4调用栈的管理和遍历10.3ART中的JIT10.3.1Jit、JitCodeCache等10.3.2JIT阈值控制与处理10.3.3OSR的处理10.4HDeoptimize的处理10.4.1VisitDeoptimize相关10.4.2QuickExceptionHandler相关10.4.3解释执行中关于Deoptimize的处理10.5Instrumentation介绍10.5.1MethodEnterEvent和MethodExitEvent10.5.2DexPcMovedEvent10.6异常投递和处理10.6.1抛异常10.6.2异常处理11.1JavaVM和JNIEnv11.2Javanative方法的调用11.3CallStaticVoidMethod11.4JNI中引用型对象的管理11.5总结12345第11章ART中的JNI11.1JavaVM和JNIEnv11.1.1JavaVMExt相关介绍11.1.2JNIEnvExt介绍11.2Javanative方法的调用11.2.1art_jni_dlsym_lookup_stub11.2.2art_quick_generic_jni_trampoline11.4JNI中引用型对象的管理11.4.1关键类介绍11.4.2JniMethodStart和JniMethodEnd11.4.3IndirectReferenceTable相关函数11.4.4NewObject和jobject的含义11.4.5JNI中引用对象相关11.4.6PushLocalFrame和PopLocalFrame11.4.7回收引用对象12.1CheckPoints介绍12.2ThreadList和ThreadState12.3线程同步相关知识12.4volatile成员的读写第12章CheckPoints、线程同步及信号处理12.6总结12.5信号处理第12章CheckPoints、线程同步及信号处理12.1CheckPoints介绍12.1.1设置CheckPoint标志位12.1.2CheckPoints的设置12.1.3执行检查点处的任务12.2ThreadList和ThreadState12.2.1线程ID12.2.2RunCheckpoint和Dump12.2.3SuspendAll和ResumeAll12.2.4Thread状态切换12.3线程同步相关知识12.3.1关键类介绍12.3.2synchronized的处理12.3.3Objectwait、notifyAll等12.4volatile成员的读写12.4.1基础知识12.4.2解释执行模式下的处理12.4.3机器码执行模式的处理12.5信号处理12.5.1zygote进程的处理12.5.2非zygote进程的处理13.1Space等关键类介绍13.2ZygoteSpace13.3BumpPointerSpace和RegionSpace13.4DlMallocSpace和RosAllocSpace13.5LargeObjectMapSpace12345第13章内存分配与释放13.6new-instance/array指令的处理13.7细观Space13.8Heap学习之二13.9总结第13章内存分配与释放13.3BumpPointerSpace和RegionSpace13.3.1BumpPointerSpace13.3.2RegionSpace13.4DlMallocSpace和RosAllocSpace13.4.1DlMallocSpace13.4.2RosAllocSpace13.4.3rosalloc介绍13.6new-instance/array指令的处理13.6.1设置内存分配器13.6.2解释执行模式下的处理13.6.3机器码执行模式下的处理13.6.4HeapAllocObjectWithAllocator13.7细观Space13.7.1Space类13.7.2ContinuousSpace和DiscontinuousSpace类13.7.3MemMapSpace和ContinuousMemMapAllocSpace类13.7.4MallocSpace类13.8Heap学习之二13.8.1Heap构造函数13.8.2关键类介绍13.8.3ObjectVisitReferences14.1GC基础知识14.2RuntimeVisitRoots14.3ARTGC概览14.4MarkSweep14.5ConcurrentCopying12345第14章ART中的GC14.6MarkCompact14.7SemiSpace14.8JavaReference对象的处理14.9Heap学习之三14.10总结14.11参考资料010302040506第14章ART中的GC14.1GC基础知识14.1.1Mark-SweepCollection原理介绍14.1.2CopyingCollection原理介绍14.1.3Mark-CompactCollection原理介绍14.1.4其他概念14.2RuntimeVisitRoots14.2.1关键数据结构14.2.2ThreadVisitRoots14.3ARTGC概览14.3.1关键数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论