深入理解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

提交評論