深入理解Android:Java虛擬機ART_第1頁
深入理解Android:Java虛擬機ART_第2頁
深入理解Android:Java虛擬機ART_第3頁
深入理解Android:Java虛擬機ART_第4頁
深入理解Android:Java虛擬機ART_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

深入理解Android:Java虛擬機ART讀書筆記模板01思維導(dǎo)圖讀書筆記目錄分析內(nèi)容摘要精彩摘錄作者介紹目錄0305020406思維導(dǎo)圖虛擬機虛擬機研究關(guān)注系統(tǒng)部分類函數(shù)處理第章介紹對象參考資料文件格式設(shè)置小結(jié)相關(guān)文件構(gòu)造函數(shù)本書關(guān)鍵字分析思維導(dǎo)圖內(nèi)容摘要內(nèi)容摘要本書是**“深入理解Android”系列的第四本。本書將**Android系統(tǒng)中至關(guān)重要的部分——Java虛擬機ART。隨著Android設(shè)備的大規(guī)模普及,ART虛擬機已經(jīng)成為當(dāng)今使用最為廣泛的JVM之一。所以,對ART虛擬機進(jìn)行研究有著非同尋常的意義。本書的出現(xiàn)在一定程度上填補了這方面的空白。讀書筆記讀書筆記為數(shù)不多能從源碼角度去分析art原理的書籍,看出作者確實下了很大的功夫。雖然是基于android系統(tǒng)分析,但可以作為jvm非常好的學(xué)習(xí)資料,是目前最有廣度深度的資料。這是一部從源代碼角度分析和講解Android虛擬機ART的鴻篇巨著,核心內(nèi)容和價值體現(xiàn)在3個方面:首先,細(xì)致、深入地分析了ART虛擬機的架構(gòu)、設(shè)計與實現(xiàn)原理,能讓讀者對ART虛擬機有透徹了解;第二,能讓Andriod系統(tǒng)工程師和應(yīng)用工程師從底層了解整個Android系統(tǒng)的運行機理,從而寫出更高質(zhì)量的應(yīng)用;第三,Java虛擬機是一個“龐然大物”,學(xué)習(xí)和理解的門檻較高,ART是迄今應(yīng)用廣泛的JVM實現(xiàn),本書為讀者學(xué)習(xí)JVM提供了獨特的視角和更為容易的路徑。精彩摘錄精彩摘錄如果一個Class文件依賴另外一個Class文件,則虛擬機在處理的時候需要讀取另外一個Class文件的內(nèi)容,這可能會導(dǎo)致CPU和存儲設(shè)備進(jìn)行更多的I/O操作。而classes.dex由于一個文件就包含了所有的信息,相對而言會減少I/O操作的次數(shù)。一個Class文件對應(yīng)一個Java源碼文件,而一個Dex文件可對應(yīng)多個Java源碼文件。Dex文件是Android平臺上和傳統(tǒng)Class文件對應(yīng)的Java字節(jié)碼文件。Dex文件的核心內(nèi)容其實與傳統(tǒng)Class文件類似,只不過針對移動設(shè)備做了一些定制化處理MethodDescriptor不包括函數(shù)名。這么做的目的其實也是為了節(jié)省空間對比Linux、Windows上的可執(zhí)行文件而言,Class文件可以看作是Java虛擬機的可執(zhí)行文件。對ART虛擬機而言,其編譯模塊沒有包含F(xiàn)rontend,因為從Java源代碼到Dex字節(jié)碼的前端工作是在APP開發(fā)過程中由Java編譯器、dex工具完成的在JVM規(guī)范中,指令碼的長度是1個字節(jié)。所以JVM規(guī)范中定義的Java指令碼的個數(shù)不會超過255個(255的16進(jìn)制表示為0xFF)。目錄分析1.1概述1.2準(zhǔn)備環(huán)境和工具1.3本書的內(nèi)容1.4本書資源下載說明第1章本書必讀1.2準(zhǔn)備環(huán)境和工具1.2.1準(zhǔn)備源代碼1.2.2準(zhǔn)備SourceInsight1.2.3準(zhǔn)備模擬器和自制系統(tǒng)鏡像1.2.4小結(jié)2.1Class文件格式總覽2.2常量池及相關(guān)內(nèi)容2.3field_info和method_info2.4access_flags介紹第2章深入理解Class文件格式2.5屬性介紹2.6Java指令碼介紹2.7學(xué)習(xí)路線推薦2.8參考資料第2章深入理解Class文件格式2.2常量池及相關(guān)內(nèi)容2.2.1常量項的類型和關(guān)系2.2.2信息描述規(guī)則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如何閱讀規(guī)范3.1Dex文件格式總覽3.2認(rèn)識Dex文件3.3Dex指令碼介紹3.4學(xué)習(xí)路線推薦3.5參考資料12345第3章深入理解Dex文件格式3.1Dex文件格式總覽3.1.1Dex和Class文件格式的區(qū)別3.1.2Dex文件格式的概貌3.2認(rèn)識Dex文件3.2.1header_item3.2.2string_id_item等3.2.3class_def3.2.4code_item3.3Dex指令碼介紹3.3.1insns的組織形式3.3.2指令碼描述規(guī)則4.1概述4.2ELF文件格式介紹4.3學(xué)習(xí)路線推薦4.4參考資料第4章深入理解ELF文件格式4.2ELF文件格式介紹4.2.1ELF文件頭結(jié)構(gòu)介紹4.2.2LinkingView下的ELF4.2.3ExecutionView下的ELF4.2.4實例分析:調(diào)用動態(tài)庫中的函數(shù)4.2.5ELF總結(jié)5.1數(shù)據(jù)類型5.2C++源碼構(gòu)成及編譯5.3Class介紹5.4操作符重載5.5函數(shù)模板與類模板5.6lambda表達(dá)式010302040506第5章認(rèn)識C++115.7STL介紹5.9參考資料5.8其他常用知識第5章認(rèn)識C++115.1數(shù)據(jù)類型5.1.1基本內(nèi)置數(shù)據(jù)類型介紹5.1.2指針、引用和void類型5.1.3字符和字符串5.1.4數(shù)組5.2C++源碼構(gòu)成及編譯5.2.1頭文件示例5.2.2源文件示例5.2.3編譯5.3Class介紹5.3.1構(gòu)造、賦值和析構(gòu)函數(shù)5.3.2類的派生和繼承5.3.3友元和類的前向聲明5.3.4explicit構(gòu)造函數(shù)5.3.5C++中的struct5.4操作符重載5.4.1操作符重載的實現(xiàn)方式5.4.2輸出和輸入操作符重載5.4.3->和*操作符重載5.4.4new和delete操作符重載5.4.5函數(shù)調(diào)用運算符重載5.5函數(shù)模板與類模板5.5.1函數(shù)模板5.5.2類模板5.7STL介紹5.7.1string類5.7.2容器類5.7.3算法和函數(shù)對象介紹5.7.4智能指針類5.7.5探討STL的學(xué)習(xí)5.8其他常用知識5.8.1initializer_list5.8.2帶作用域的enum5.8.3constexpr5.8.4static_assert6.1編譯器全貌介紹6.2編譯器前端介紹6.3優(yōu)化器介紹6.4ART中的IR—HInstruction第6章編譯dex字節(jié)碼為機器碼6.5寄存器分配6.6機器碼生成相關(guān)代碼介紹6.7總結(jié)6.8參考資料第6章編譯dex字節(jié)碼為機器碼6.2編譯器前端介紹6.2.1詞法分析和lex6.2.2語法分析和yacc6.2.3語義分析和IR生成介紹6.3優(yōu)化器介紹6.3.1構(gòu)造CFG6.3.2分析和處理CFG6.3.3數(shù)據(jù)流分析與SSA6.3.4IR優(yōu)化6.4ART中的IR—HInstruction6.4.1ART中的IR6.4.2IR之間的關(guān)系6.4.3ARTIR對象的初始化6.5寄存器分配6.5.1LSRA介紹6.5.2LSRA相關(guān)代碼介紹6.6機器碼生成相關(guān)代碼介紹6.6.1GenerateFrameEntry6.6.2VisitAdd和VisitInstanceFieldGet6.6.3GenerateSlowPaths7.1概述7.2RuntimeCreate介紹7.3MemMap與OatFileManager7.4FaultManager介紹第7章虛擬機的創(chuàng)建7.5Thread介紹7.6Heap學(xué)習(xí)之一7.7JavaVMExt和JNIEnvExt7.8ClassLinker7.9總結(jié)和閱讀指導(dǎo)12345第7章虛擬機的創(chuàng)建7.1概述7.1.1JniInvocationInit函數(shù)介紹7.1.2AndroidRuntimestartVm函數(shù)介紹7.2RuntimeCreate介紹7.2.1Create函數(shù)介紹7.2.2Init函數(shù)介紹7.3MemMap與OatFileManager7.3.1MemMap介紹7.3.2OatFileManager介紹7.4FaultManager介紹7.4.1信號處理和SignalAction介紹7.4.2FaultManager介紹7.5Thread介紹7.5.1Startup函數(shù)介紹7.5.2Attach函數(shù)介紹7.6Heap學(xué)習(xí)之一7.6.1初識Heap中的關(guān)鍵類7.6.2Heap構(gòu)造函數(shù)第一部分7.7JavaVMExt和JNIEnvExt7.7.1JavaVMExt7.7.2JNIEnvExt7.7.3總結(jié)7.8ClassLinker7.8.1關(guān)鍵類介紹7.8.2ClassLinker構(gòu)造函數(shù)7.8.3InitFromBootImage7.8.4ClassLinker總結(jié)8.1RuntimeStart8.2初識JNI8.3JitLoadCompilerLibrary8.4RuntimeInitNativeMethods8.5Thread相關(guān)8.6RuntimeCreateSystemClassLoader010302040506第8章虛擬機的啟動8.8虛擬機創(chuàng)建和啟動關(guān)鍵內(nèi)容梳理8.7類的加載、鏈接和初始化第8章虛擬機的啟動8.2初識JNI8.2.1JNI中的數(shù)據(jù)類型8.2.2ScopedObjectAccess等輔助類8.2.3常用JNI函數(shù)介紹8.4RuntimeInitNativeMethods8.4.1JniConstantsInit8.4.2RegisterRuntimeNativeMethods8.4.3WellKnownClassesInit和LastInit8.5Thread相關(guān)8.5.1RuntimeInitThreadGroups8.5.2ThreadFinishSetup8.5.3RuntimeStartDaemonThreads8.7類的加載、鏈接和初始化8.7.1關(guān)鍵類介紹8.7.2SetupClass8.7.3LoadClass相關(guān)函數(shù)8.7.4LinkClass相關(guān)函數(shù)8.7.5DefineClass8.7.6Verify相關(guān)函數(shù)8.7.7Initialize相關(guān)函數(shù)8.7.8ClassLinker中其他常用函數(shù)8.7.9ClassLoader介紹9.1概述9.2ParseArgs介紹9.3OpenFile介紹9.4Setup介紹9.5CompileImage12345第9章深入理解dex2oat9.7總結(jié)9.6OAT和ART文件格式介紹第9章深入理解dex2oat9.2ParseArgs介紹9.2.1CompilerOptions類介紹9.2.2ProcessOptions函數(shù)介紹9.2.3InsertCompileOptions函數(shù)介紹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基礎(chǔ)知識10.2解釋執(zhí)行10.3ART中的JIT10.4HDeoptimize的處理第10章解釋執(zhí)行和JIT10.5Instrumentation介紹10.7總結(jié)10.6異常投遞和處理第10章解釋執(zhí)行和JIT10.1基礎(chǔ)知識10.1.1LinkCode10.1.2RuntimeArtMethod10.1.3棧和參數(shù)傳遞10.2解釋執(zhí)行10.2.1art_quick_to_interpreter_bridge10.2.2artQuickToInterpreterBridge10.2.3EnterInterpreterFromEntryPoint10.2.4調(diào)用棧的管理和遍歷10.3ART中的JIT10.3.1Jit、JitCodeCache等10.3.2JIT閾值控制與處理10.3.3OSR的處理10.4HDeoptimize的處理10.4.1VisitDeoptimize相關(guān)10.4.2QuickExceptionHandler相關(guān)10.4.3解釋執(zhí)行中關(guān)于Deoptimize的處理10.5Instrumentation介紹10.5.1MethodEnterEvent和MethodExitEvent10.5.2DexPcMovedEvent10.6異常投遞和處理10.6.1拋異常10.6.2異常處理11.1JavaVM和JNIEnv11.2Javanative方法的調(diào)用11.3CallStaticVoidMethod11.4JNI中引用型對象的管理11.5總結(jié)12345第11章ART中的JNI11.1JavaVM和JNIEnv11.1.1JavaVMExt相關(guān)介紹11.1.2JNIEnvExt介紹11.2Javanative方法的調(diào)用11.2.1art_jni_dlsym_lookup_stub11.2.2art_quick_generic_jni_trampoline11.4JNI中引用型對象的管理11.4.1關(guān)鍵類介紹11.4.2JniMethodStart和JniMethodEnd11.4.3IndirectReferenceTable相關(guān)函數(shù)11.4.4NewObject和jobject的含義11.4.5JNI中引用對象相關(guān)11.4.6PushLocalFrame和PopLocalFrame11.4.7回收引用對象12.1CheckPoints介紹12.2ThreadList和ThreadState12.3線程同步相關(guān)知識12.4volatile成員的讀寫第12章CheckPoints、線程同步及信號處理12.6總結(jié)12.5信號處理第12章CheckPoints、線程同步及信號處理12.1CheckPoints介紹12.1.1設(shè)置CheckPoint標(biāo)志位12.1.2CheckPoints的設(shè)置12.1.3執(zhí)行檢查點處的任務(wù)12.2ThreadList和ThreadState12.2.1線程ID12.2.2RunCheckpoint和Dump12.2.3SuspendAll和ResumeAll12.2.4Thread狀態(tài)切換12.3線程同步相關(guān)知識12.3.1關(guān)鍵類介紹12.3.2synchronized的處理12.3.3Objectwait、notifyAll等12.4volatile成員的讀寫12.4.1基礎(chǔ)知識12.4.2解釋執(zhí)行模式下的處理12.4.3機器碼執(zhí)行模式的處理12.5信號處理12.5.1zygote進(jìn)程的處理12.5.2非zygote進(jìn)程的處理13.1Space等關(guān)鍵類介紹13.2ZygoteSpace13.3BumpPointerSpace和RegionSpace13.4DlMallocSpace和RosAllocSpace13.5LargeObjectMapSpace12345第13章內(nèi)存分配與釋放13.6new-instance/array指令的處理13.7細(xì)觀Space13.8Heap學(xué)習(xí)之二13.9總結(jié)第13章內(nèi)存分配與釋放13.3BumpPointerSpace和RegionSpace13.3.1BumpPointerSpace13.3.2RegionSpace13.4DlMallocSpace和RosAllocSpace13.4.1DlMallocSpace13.4.2RosAllocSpace13.4.3rosalloc介紹13.6new-instance/array指令的處理13.6.1設(shè)置內(nèi)存分配器13.6.2解釋執(zhí)行模式下的處理13.6.3機器碼執(zhí)行模式下的處理13.6.4HeapAllocObjectWithAllocator13.7細(xì)觀Space13.7.1Space類13.7.2ContinuousSpace和DiscontinuousSpace類13.7.3MemMapSpace和ContinuousMemMapAllocSpace類13.7.4MallocSpace類13.8Heap學(xué)習(xí)之二13.8.1Heap構(gòu)造函數(shù)13.8.2關(guān)鍵類介紹13.8.3ObjectVisitReferences14.1GC基礎(chǔ)知識14.2RuntimeVisitRoots14.3ARTGC概覽14.4MarkSweep14.5ConcurrentCopying12345第14章ART中的GC14.6MarkCompact14.7SemiSpace14.8JavaReference對象的處理14.9Heap學(xué)習(xí)之三14.10總結(jié)14.11參考資料010302040506第14章ART中的GC14.1GC基礎(chǔ)知識14.1.1Mark-SweepCollection原理介紹14.1.2CopyingCollection原理介紹14.1.3Mark-CompactCollection原理介紹14.1.4其他概念14.2RuntimeVisitRoots14.2.1關(guān)鍵數(shù)據(jù)結(jié)構(gòu)14.2.2ThreadVisitRoots14.3ARTGC概覽14.3.1關(guān)鍵數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論