注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)深入理解Android:Java虛擬機(jī)ART

深入理解Android:Java虛擬機(jī)ART

深入理解Android:Java虛擬機(jī)ART

定 價(jià):¥169.00

作 者: 鄧凡平 著
出版社: 機(jī)械工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

購(gòu)買(mǎi)這本書(shū)可以去


ISBN: 9787111621225 出版時(shí)間: 2019-04-01 包裝: 平裝
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 928 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  這是一部從源代碼角度分析和講解Android虛擬機(jī)ART的鴻篇巨著,核心內(nèi)容和價(jià)值體現(xiàn)在3個(gè)方面: 首先,細(xì)致、深入地分析了ART虛擬機(jī)的架構(gòu)、設(shè)計(jì)與實(shí)現(xiàn)原理,能讓讀者對(duì)ART虛擬機(jī)有透徹了解; 第二,能讓Andriod系統(tǒng)工程師和應(yīng)用工程師從底層了解整個(gè)Android系統(tǒng)的運(yùn)行機(jī)理,從而寫(xiě)出更高質(zhì)量的應(yīng)用; 第三,Java虛擬機(jī)是一個(gè)“龐然大物”,學(xué)習(xí)和理解的門(mén)檻較高,ART是迄今應(yīng)用廣泛的JVM實(shí)現(xiàn),本書(shū)為讀者學(xué)習(xí)JVM提供了獨(dú)特的視角和更為容易的路徑。 全書(shū)共14章: 第1章介紹了在學(xué)習(xí)ART虛擬機(jī)前需要準(zhǔn)備的工具和環(huán)境,以及本書(shū)的內(nèi)容結(jié)構(gòu)和閱讀注意事項(xiàng),建議仔細(xì)讀和反復(fù)讀; 第2~4章詳細(xì)講解了Class文件、dex文件和ELF文件的格式和內(nèi)容,理解Class文件是學(xué)習(xí)JVM的一步,dex和ELF者是學(xué)習(xí)Dalvik虛擬機(jī)和ART虛擬機(jī)的的前提和基礎(chǔ); 第5章詳細(xì)講解了ART虛擬機(jī)的實(shí)現(xiàn)語(yǔ)言C++11,是閱讀ART源代碼必備的知識(shí); 第6~8章詳細(xì)講解了ART虛擬機(jī)中與編譯和Runtime相關(guān)的大量知識(shí),這是虛擬機(jī)的核心和難點(diǎn); 第9章詳細(xì)講解了dex字節(jié)碼轉(zhuǎn)機(jī)器碼的核心進(jìn)程dex2oat以及.oat和.art的文件格式; 第10~11章詳細(xì)講解了虛擬機(jī)的解釋執(zhí)行、JIT部分以及異常的投遞和處理的過(guò)程,以及JNI在ART虛擬機(jī)中的實(shí)現(xiàn)。 第12~14章詳細(xì)講解了虛擬機(jī)中Java線程的執(zhí)行、內(nèi)存分配和釋放、垃圾回收的原理與實(shí)現(xiàn)。 本書(shū)是經(jīng)典叢書(shū)“深入理解Android”系列的第8本,繼承了該系列圖書(shū)嚴(yán)謹(jǐn)、細(xì)致、深入、編排考究的優(yōu)點(diǎn),相信所有Android工程師和Java工程師都能從中受益。

作者簡(jiǎn)介

  鄧凡平 資深A(yù)ndroid技術(shù)專(zhuān)家,國(guó)內(nèi)早期從事Android技術(shù)研究和開(kāi)發(fā)的工程師之一。從底層的虛擬機(jī),到中間的系統(tǒng)層和框架層,再到上層的各種應(yīng)用,它對(duì)整個(gè)Android系統(tǒng)的源代碼有非常深入的研究和理解。策劃并撰寫(xiě)了“深入理解Android”系列圖書(shū)(目前已出版8本),累計(jì)銷(xiāo)量超過(guò)10萬(wàn)冊(cè),是廣大Android工程師系統(tǒng)、深入了解Android系統(tǒng)源代碼。 目前就職于民生銀行總行科技部創(chuàng)新技術(shù)研究院,鉆研和探索物聯(lián)網(wǎng)等新技術(shù)在金融領(lǐng)域中的應(yīng)用。曾就職于索尼移動(dòng),擔(dān)任資深軟件架構(gòu)師。 他本人已出版著作: 《深入理解Android:卷I》(2011年) 《深入理解Android:卷II》(2012年) 《深入理解Android:Wi-Fi、NFC和GPS卷》(2014年)

圖書(shū)目錄

推薦序
前言
第1章 本書(shū)必讀1
1.1 概述1
1.2 準(zhǔn)備環(huán)境和工具2
1.2.1 準(zhǔn)備源代碼2
1.2.2 準(zhǔn)備Source Insight2
1.2.3 準(zhǔn)備模擬器和自制系統(tǒng)鏡像5
1.2.4 小結(jié)8
1.3 本書(shū)的內(nèi)容9
1.4 本書(shū)資源下載說(shuō)明12
第2章 深入理解Class文件格式13
2.1 Class文件格式總覽13
2.2 常量池及相關(guān)內(nèi)容14
2.2.1 常量項(xiàng)的類(lèi)型和關(guān)系14
2.2.2 信息描述規(guī)則18
2.2.3 常量池實(shí)例剖析19
2.3 field_info和method_info19
2.4 access_flags介紹21
2.5 屬性介紹22
2.5.1 屬性概貌22
2.5.2 Code屬性23
2.5.3 LineNumberTable屬性25
2.5.4 LocalVariableTable屬性26
2.6 Java指令碼介紹27
2.6.1 指令碼和助記符27
2.6.2 如何閱讀規(guī)范28
2.7 學(xué)習(xí)路線推薦30
2.8 參考資料30
第3章 深入理解Dex文件格式31
3.1 Dex文件格式總覽31
3.1.1 Dex和Class文件格式的區(qū)別31
3.1.2 Dex文件格式的概貌35
3.2 認(rèn)識(shí)Dex文件36
3.2.1 header_item36
3.2.2 string_id_item等37
3.2.3 class_def38
3.2.4 code_item40
3.3 Dex指令碼介紹41
3.3.1 insns的組織形式41
3.3.2 指令碼描述規(guī)則42
3.4 學(xué)習(xí)路線推薦44
3.5 參考資料45
第4章 深入理解ELF文件格式46
4.1 概述46
4.2 ELF文件格式介紹46
4.2.1 ELF文件頭結(jié)構(gòu)介紹47
4.2.2 Linking View下的ELF52
4.2.3 Execution View下的ELF61
4.2.4 實(shí)例分析:調(diào)用動(dòng)態(tài)庫(kù)中的函數(shù)65
4.2.5 ELF總結(jié)72
4.3 學(xué)習(xí)路線推薦73
4.4 參考資料73
第5章 認(rèn)識(shí)C++1174
5.1 數(shù)據(jù)類(lèi)型76
5.1.1 基本內(nèi)置數(shù)據(jù)類(lèi)型介紹76
5.1.2 指針、引用和void類(lèi)型77
5.1.3 字符和字符串81
5.1.4 數(shù)組82
5.2 C++源碼構(gòu)成及編譯83
5.2.1 頭文件示例83
5.2.2 源文件示例85
5.2.3 編譯86
5.3 Class介紹88
5.3.1 構(gòu)造、賦值和析構(gòu)函數(shù)89
5.3.2 類(lèi)的派生和繼承97
5.3.3 友元和類(lèi)的前向聲明103
5.3.4 explicit構(gòu)造函數(shù)105
5.3.5 C++中的struct106
5.4 操作符重載106
5.4.1 操作符重載的實(shí)現(xiàn)方式107
5.4.2 輸出和輸入操作符重載108
5.4.3 ->和*操作符重載110
5.4.4 new和delete操作符重載111
5.4.5 函數(shù)調(diào)用運(yùn)算符重載117
5.5 函數(shù)模板與類(lèi)模板118
5.5.1 函數(shù)模板119
5.5.2 類(lèi)模板122
5.6 lambda表達(dá)式125
5.7 STL介紹127
5.7.1 string類(lèi)128
5.7.2 容器類(lèi)129
5.7.3 算法和函數(shù)對(duì)象介紹134
5.7.4 智能指針類(lèi)138
5.7.5 探討STL的學(xué)習(xí)140
5.8 其他常用知識(shí)141
5.8.1 initializer_list141
5.8.2 帶作用域的enum141
5.8.3 constexpr142
5.8.4 static_assert143
5.9 參考資料143
第6章 編譯dex字節(jié)碼為機(jī)器碼145
6.1 編譯器全貌介紹147
6.2 編譯器前端介紹150
6.2.1 詞法分析和lex151
6.2.2 語(yǔ)法分析和yacc160
6.2.3 語(yǔ)義分析和IR生成介紹171
6.3 優(yōu)化器介紹175
6.3.1 構(gòu)造CFG176
6.3.2 分析和處理CFG181
6.3.3 數(shù)據(jù)流分析與SSA191
6.3.4 IR優(yōu)化204
6.4 ART中的IR—HInstruction222
6.4.1 ART中的IR222
6.4.2 IR之間的關(guān)系225
6.4.3 ART IR對(duì)象的初始化231
6.5 寄存器分配233
6.5.1 LSRA介紹235
6.5.2 LSRA相關(guān)代碼介紹247
6.6 機(jī)器碼生成相關(guān)代碼介紹271
6.6.1 GenerateFrameEntry272
6.6.2 VisitAdd和VisitInstance-FieldGet273
6.6.3 GenerateSlowPaths275
6.7 總結(jié)277
6.8 參考資料280
第7章 虛擬機(jī)的創(chuàng)建283
7.1 概述284
7.1.1 JniInvocation Init函數(shù)介紹286
7.1.2 AndroidRuntime startVm函數(shù)介紹287
7.2 Runtime Create介紹288
7.2.1 Create函數(shù)介紹288
7.2.2 Init函數(shù)介紹290
7.3 MemMap與OatFileManager293
7.3.1 MemMap介紹293
7.3.2 OatFileManager介紹298
7.4 FaultManager介紹302
7.4.1 信號(hào)處理和SignalAction介紹302
7.4.2 FaultManager介紹307
7.5 Thread介紹311
7.5.1 Startup函數(shù)介紹311
7.5.2 Attach函數(shù)介紹312
7.6 Heap學(xué)習(xí)之一325
7.6.1 初識(shí)Heap中的關(guān)鍵類(lèi)326
7.6.2 Heap構(gòu)造函數(shù)第一部分337
7.7 JavaVMExt和JNIEnvExt340
7.7.1 JavaVMExt341
7.7.2 JNIEnvExt343
7.7.3 總結(jié)344
7.8 ClassLinker345
7.8.1 關(guān)鍵類(lèi)介紹345
7.8.2 ClassLinker構(gòu)造函數(shù)352
7.8.3 InitFromBootImage353
7.8.4 ClassLinker總結(jié)360
7.9 總結(jié)和閱讀指導(dǎo)362
第8章 虛擬機(jī)的啟動(dòng)363
8.1 Runtime Start364
8.2 初識(shí)JNI365
8.2.1 JNI中的數(shù)據(jù)類(lèi)型365
8.2.2 ScopedObjectAccess等輔助類(lèi)367
8.2.3 常用JNI函數(shù)介紹369
8.3 Jit LoadCompilerLibrary373
8.4 Runtime InitNativeMethods374
8.4.1 JniConstants Init374
8.4.2 RegisterRuntimeNative Methods375
8.4.3 WellKnownClasses Init和LastInit376
8.5 Thread相關(guān)376
8.5.1 Runtime InitThreadGroups377
8.5.2 Thread FinishSetup377
8.5.3 Runtime StartDaemonThreads380
8.6 Runtime CreateSystemClassLoader381
8.7 類(lèi)的加載、鏈接和初始化383
8.7.1 關(guān)鍵類(lèi)介紹383
8.7.2 SetupClass392
8.7.3 LoadClass相關(guān)函數(shù)393
8.7.4 LinkClass相關(guān)函數(shù)398
8.7.5 DefineClass414
8.7.6 Verify相關(guān)函數(shù)416
8.7.7 Initialize相關(guān)函數(shù)424
8.7.8 ClassLinker中其他常用函數(shù)426
8.7.9 ClassLoader介紹437
8.8 虛擬機(jī)創(chuàng)建和啟動(dòng)關(guān)鍵內(nèi)容梳理445
第9章 深入理解dex2oat447
9.1 概述448
9.2 ParseArgs介紹452
9.2.1 CompilerOptions類(lèi)介紹453
9.2.2 ProcessOptions函數(shù)介紹454
9.2.3 InsertCompileOptions函數(shù)介紹455
9.3 OpenFile介紹456
9.4 Setup介紹458
9.4.1 Setup代碼分析之一458
9.4.2 Setup代碼分析之二464
9.4.3 Setup代碼分析之三474
9.4.4 Setup代碼分析之四484
9.5 CompileImage484
9.5.1 Compile485
9.5.2 ArtCompileDEX496
9.5.3 OptimizingCompiler JniCompile499
9.5.4 OptimizingCompiler Compile527
9.6 OAT和ART文件格式介紹544
9.6.1 OAT文件格式544
9.6.2 ART文件格式550
9.6.3 oatdump介紹554
9.7 總結(jié)561
第10章 解釋執(zhí)行和JIT562
10.1 基礎(chǔ)知識(shí)564
10.1.1 LinkCode564
10.1.2 Runtime ArtMethod566
10.1.3 棧和參數(shù)傳遞572
10.2 解釋執(zhí)行580
10.2.1 art_quick_to_interpreter_bridge580
10.2.2 artQuickToInterpreter-Bridge582
10.2.3 EnterInterpreterFromEntry-Point584
10.2.4 調(diào)用棧的管理和遍歷593
10.3 ART中的JIT599
10.3.1 Jit、JitCodeCache等600
10.3.2 JIT閾值控制與處理609
10.3.3 OSR的處理612
10.4 HDeoptimize的處理615
10.4.1 VisitDeoptimize相關(guān)616
10.4.2 QuickExceptionHandler相關(guān)618
10.4.3 解釋執(zhí)行中關(guān)于Deoptimize的處理621
10.5 Instrumentation介紹623
10.5.1 MethodEnterEvent和MethodExitEvent624
10.5.2 DexPcMovedEvent625
10.6 異常投遞和處理625
10.6.1 拋異常626
10.6.2 異常處理629
10.7 總結(jié)635
第11章 ART中的JNI636
11.1 JavaVM和JNIEnv637
11.1.1 JavaVMExt相關(guān)介紹638
11.1.2 JNIEnvExt介紹642
11.2 Java native方法的調(diào)用644
11.2.1 art_jni_dlsym_lookup_stub644
11.2.2 art_quick_generic_jni_trampoline646
11.3 CallStaticVoidMethod651
11.4 JNI中引用型對(duì)象的管理653
11.4.1 關(guān)鍵類(lèi)介紹653
11.4.2 JniMethodStart和JniMethod-End657
11.4.3 IndirectReferenceTable相關(guān)函數(shù)658
11.4.4 NewObject和jobject的含義660
11.4.5 JNI中引用對(duì)象相關(guān)662
11.4.6 PushLocalFrame和PopLocalFrame663
11.4.7 回收引用對(duì)象664
11.5 總結(jié)666
第12章 CheckPoints、線程同步及信號(hào)處理668
12.1 CheckPoints介紹669
12.1.1 設(shè)置Check Point標(biāo)志位670
12.1.2 Check Points的設(shè)置672
12.1.3 執(zhí)行檢查點(diǎn)處的任務(wù)676
12.2 ThreadList和ThreadState681
12.2.1 線程ID683
12.2.2 RunCheckpoint和Dump684
12.2.3 SuspendAll和ResumeAll687
12.2.4 Thread狀態(tài)切換690
12.3 線程同步相關(guān)知識(shí)691
12.3.1 關(guān)鍵類(lèi)介紹692
12.3.2 synchronized的處理697
12.3.3 Object wait、notifyAll等705
12.4 volatile成員的讀寫(xiě)707
12.4.1 基礎(chǔ)知識(shí)707
12.4.2 解釋執(zhí)行模式下的處理711
12.4.3 機(jī)器碼執(zhí)行模式的處理712
12.5 信號(hào)處理714
12.5.1 zygote進(jìn)程的處理714
12.5.2 非zygote進(jìn)程的處理716
12.6 總結(jié)719
第13章 內(nèi)存分配與釋放720
13.1 Space等關(guān)鍵類(lèi)介紹722
13.2 ZygoteSpace723
13.3 BumpPointerSpace和RegionSpace725
13.3.1 BumpPointerSpace726
13.3.2 RegionSpace733
13.4 DlMallocSpace和RosAlloc-Space740
13.4.1 DlMallocSpace741
13.4.2 RosAllocSpace745
13.4.3 rosalloc介紹748
13.5 LargeObjectMapSpace760
13.6 new-instance/array指令的處理762
13.6.1 設(shè)置內(nèi)存分配器762
13.6.2 解釋執(zhí)行模式下的處理767
13.6.3 機(jī)器碼執(zhí)行模式下的處理770
13.6.4 Heap AllocObjectWith-Allocator773
13.7 細(xì)觀Space779
13.7.1 Space類(lèi)779
13.7.2 ContinuousSpace和Discon-tinuousSpace類(lèi)781
13.7.3 MemMapSpace和Continuous MemMapAllocSpace類(lèi)782
13.7.4 MallocSpace類(lèi)783
13.8 Heap學(xué)習(xí)之二784
13.8.1 Heap構(gòu)造函數(shù)784
13.8.2 關(guān)鍵類(lèi)介紹792
13.8.3 ObjectVisitReferences806
13.9 總結(jié)812
第14章 ART中的GC813
14.1 GC基礎(chǔ)知識(shí)814
14.1.1 Mark-Sweep Collection原理介紹815
14.1.2 Copying Collection原理介紹817
14.1.3 Mark-Compact Collection原理介紹818
14.1.4 其他概念819
14.2 Runtime VisitRoots819
14.2.1 關(guān)鍵數(shù)據(jù)結(jié)構(gòu)821
14.2.2 Thread VisitRoots824
14.3 ART GC概覽827
14.3.1 關(guān)鍵數(shù)據(jù)結(jié)構(gòu)827
14.3.2 ART GC選項(xiàng)830
14.3.3 創(chuàng)建回收器和設(shè)置回收策略832
14.4 MarkSweep835
14.4.1 Heap相關(guān)成員變量取值情況835
14.4.2 MarkSweep概貌837
14.4.3 MarkingPhase840
14.4.4 PausePhase848
14.4.5 ReclaimPhase851
14.4.6 FinishPhase857
14.4.7 PartialMarkSweep857
14.4.8 StickyMarkSweep858
14.4.9 Concurrent MarkSweep864
14.4.10 Parallel GC868
14.4.11 MarkSweep小結(jié)869
14.5 ConcurrentCopying870
14.5.1 InitalizePhase871
14.5.2 FlipThreadRoots873
14.5.3 MarkingPhase881
14.5.4 ReclaimPhase883
14.5.5ConcurrentCopying小結(jié)885
14.6 MarkCompact885
14.6.1 MarkingPhase886
14.6.2 ReclaimPhase889
14.6.3 MarkCompact小結(jié)891
14.7 SemiSpace892
14.7.1 InitializePhase893
14.7.2 MarkingPhase894
14.7.3 SemiSpace小結(jié)898
14.8 Java Reference對(duì)象的處理899
14.8.1 基礎(chǔ)知識(shí)899
14.8.2 MarkSweep中Reference對(duì)象的處理903
14.8.3ReferenceProcessor904
14.8.4 PhantomReference的處理912
14.8.5 finalize函數(shù)的調(diào)用913
14.8.6 Reference處理小結(jié)917
14.9 Heap學(xué)習(xí)之三917
14.9.1 Heap Trim917
14.9.2 CollectGarbageInternal919
14.9.3 PreZygoteFork924
14.9.4 內(nèi)存碎片的解決926
14.10 總結(jié)927
14.11 參考資料928

本目錄推薦

掃描二維碼
Copyright ? 讀書(shū)網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)