TOP
紅利積點抵現金,消費購書更貼心
深入理解Android:Java虛擬機ART(簡體書)
滿額折

深入理解Android:Java虛擬機ART(簡體書)

商品資訊

人民幣定價:169 元
定價
:NT$ 1014 元
優惠價
87882
海外經銷商無庫存,到貨日平均30天至45天
下單可得紅利積點:26 點
商品簡介
作者簡介
目次

商品簡介

這是一部從源代碼角度分析和講解Android虛擬機ART的鴻篇巨著,核心內容和價值體現在3個方面:

首先,細緻、深入地分析了ART虛擬機的架構、設計與實現原理,能讓讀者對ART虛擬機有透徹瞭解;

第二,能讓Andriod系統工程師和應用工程師從底層瞭解整個Android系統的運行機理,從而寫出更高質量的應用;

第三,Java虛擬機是一個“龐然大物”,學習和理解的門檻較高,ART是迄今應用廣泛的JVM實現,本書為讀者學習JVM提供了獨特的視角和更為容易的路徑。

全書共14章:

第1章介紹了在學習ART虛擬機前需要準備的工具和環境,以及本書的內容結構和閱讀注意事項,建議仔細讀和反復讀;

第2~4章詳細講解了Class文件、dex文件和ELF文件的格式和內容,理解Class文件是學習JVM的一步,dex和ELF者是學習Dalvik虛擬機和ART虛擬機的的前提和基礎;

第5章詳細講解了ART虛擬機的實現語言C++11,是閱讀ART源代碼必備的知識;

第6~8章詳細講解了ART虛擬機中與編譯和Runtime相關的大量知識,這是虛擬機的核心和難點;

第9章詳細講解了dex字節碼轉機器碼的核心進程dex2oat以及.oat和.art的文件格式;

第10~11章詳細講解了虛擬機的解釋執行、JIT部分以及異常的投遞和處理的過程,以及JNI在ART虛擬機中的實現。

第12~14章詳細講解了虛擬機中Java線程的執行、內存分配和釋放、垃圾回收的原理與實現。

本書是經典叢書“深入理解Android”系列的第8本,繼承了該系列圖書嚴謹、細緻、深入、編排考究的優點,相信所有Android工程師和Java工程師都能從中受益。

作者簡介

鄧凡平,

資深Android技術專家,國內早期從事Android技術研究和開發的工程師之一。從底層的虛擬機,到中間的系統層和框架層,再到上層的各種應用,它對整個Android系統的源代碼有非常深入的研究和理解。策劃並撰寫了“深入理解Android”系列圖書(目前已出版8本),累計銷量超過10萬冊,是廣大Android工程師系統、深入瞭解Android系統源代碼。

目前就職于民生銀行總行科技部創新技術研究院,鑽研和探索物聯網等新技術在金融領域中的應用。曾就職於索尼移動,擔任資深軟件架構師。

他本人已出版著作:

《深入理解Android:卷I》(2011年)

《深入理解Android:卷II》(2012年)

《深入理解Android:Wi-Fi、NFC和GPS卷》(2014年)

目次

和*操作符重載110

5.4.4 new和delete操作符重載111

5.4.5 函數調用運算符重載117

5.5 函數模板與類模板118

5.5.1 函數模板119

5.5.2 類模板122

5.6 lambda表達式125

5.7 STL介紹127

5.7.1 string類128

5.7.2 容器類129

5.7.3 算法和函數對象介紹134

5.7.4 智能指針類138

5.7.5 探討STL的學習140

5.8 其他常用知識141

5.8.1 initializer_list141

5.8.2 帶作用域的enum141

5.8.3 constexpr142

5.8.4 static_assert143

5.9 參考資料143

第6章 編譯dex字節碼為機器碼145

6.1 編譯器全貌介紹147

6.2 編譯器前端介紹150

6.2.1 詞法分析和lex151

6.2.2 語法分析和yacc160

6.2.3 語義分析和IR生成介紹171

6.3 優化器介紹175

6.3.1 構造CFG176

6.3.2 分析和處理CFG181

6.3.3 數據流分析與SSA191

6.3.4 IR優化204

6.4 ART中的IR―HInstruction222

6.4.1 ART中的IR222

6.4.2 IR之間的關係225

6.4.3 ART IR對象的初始化231

6.5 寄存器分配233

6.5.1 LSRA介紹235

6.5.2 LSRA相關代碼介紹247

6.6 機器碼生成相關代碼介紹271

6.6.1 GenerateFrameEntry272

6.6.2 VisitAdd和VisitInstance-FieldGet273

6.6.3 GenerateSlowPaths275

6.7 總結277

6.8 參考資料280

第7章 虛擬機的創建283

7.1 概述284

7.1.1 JniInvocation Init函數介紹286

7.1.2 AndroidRuntime startVm函數介紹287

7.2 Runtime Create介紹288

7.2.1 Create函數介紹288

7.2.2 Init函數介紹290

7.3 MemMap與OatFileManager293

7.3.1 MemMap介紹293

7.3.2 OatFileManager介紹298

7.4 FaultManager介紹302

7.4.1 信號處理和SignalAction介紹302

7.4.2 FaultManager介紹307

7.5 Thread介紹311

7.5.1 Startup函數介紹311

7.5.2 Attach函數介紹312

7.6 Heap學習之一325

7.6.1 初識Heap中的關鍵類326

7.6.2 Heap構造函數第一部分337

7.7 JavaVMExt和JNIEnvExt340

7.7.1 JavaVMExt341

7.7.2 JNIEnvExt343

7.7.3 總結344

7.8 ClassLinker345

7.8.1 關鍵類介紹345

7.8.2 ClassLinker構造函數352

7.8.3 InitFromBootImage353

7.8.4 ClassLinker總結360

7.9 總結和閱讀指導362

第8章 虛擬機的啟動363

8.1 Runtime Start364

8.2 初識JNI365

8.2.1 JNI中的數據類型365

8.2.2 ScopedObjectAccess等輔助類367

8.2.3 常用JNI函數介紹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相關376

8.5.1 Runtime InitThreadGroups377

8.5.2 Thread FinishSetup377

8.5.3 Runtime StartDaemonThreads380

8.6 Runtime CreateSystemClassLoader381

8.7 類的加載、鏈接和初始化383

8.7.1 關鍵類介紹383

8.7.2 SetupClass392

8.7.3 LoadClass相關函數393

8.7.4 LinkClass相關函數398

8.7.5 DefineClass414

8.7.6 Verify相關函數416

8.7.7 Initialize相關函數424

8.7.8 ClassLinker中其他常用函數426

8.7.9 ClassLoader介紹437

8.8 虛擬機創建和啟動關鍵內容梳理445

第9章 深入理解dex2oat447

9.1 概述448

9.2 ParseArgs介紹452

9.2.1 CompilerOptions類介紹453

9.2.2 ProcessOptions函數介紹454

9.2.3 InsertCompileOptions函數介紹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 總結561

第10章 解釋執行和JIT562

10.1 基礎知識564

10.1.1 LinkCode564

10.1.2 Runtime ArtMethod566

10.1.3 棧和參數傳遞572

10.2 解釋執行580

10.2.1 art_quick_to_interpreter_bridge580

10.2.2 artQuickToInterpreter-Bridge582

10.2.3 EnterInterpreterFromEntry-Point584

10.2.4 調用棧的管理和遍歷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相關616

10.4.2 QuickExceptionHandler相關618

10.4.3 解釋執行中關於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 總結635

第11章 ART中的JNI636

11.1 JavaVM和JNIEnv637

11.1.1 JavaVMExt相關介紹638

11.1.2 JNIEnvExt介紹642

11.2 Java native方法的調用644

11.2.1 art_jni_dlsym_lookup_stub644

11.2.2 art_quick_generic_jni_trampoline646

11.3 CallStaticVoidMethod651

11.4 JNI中引用型對象的管理653

11.4.1 關鍵類介紹653

11.4.2 JniMethodStart和JniMethod-End657

11.4.3 IndirectReferenceTable相關函數658

11.4.4 NewObject和jobject的含義660

11.4.5 JNI中引用對象相關662

11.4.6 PushLocalFrame和PopLocalFrame663

11.4.7 回收引用對象664

11.5 總結666

第12章 CheckPoints、線程同步及信號處理668

12.1 CheckPoints介紹669

12.1.1 設置Check Point標誌位670

12.1.2 Check Points的設置672

12.1.3 執行檢查點處的任務676

12.2 ThreadList和ThreadState681

12.2.1 線程ID683

12.2.2 RunCheckpoint和Dump684

12.2.3 SuspendAll和ResumeAll687

12.2.4 Thread狀態切換690

12.3 線程同步相關知識691

12.3.1 關鍵類介紹692

12.3.2 synchronized的處理697

12.3.3 Object wait、notifyAll等705

12.4 volatile成員的讀寫707

12.4.1 基礎知識707

12.4.2 解釋執行模式下的處理711

12.4.3 機器碼執行模式的處理712

12.5 信號處理714

12.5.1 zygote進程的處理714

12.5.2 非zygote進程的處理716

12.6 總結719

第13章 內存分配與釋放720

13.1 Space等關鍵類介紹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 設置內存分配器762

13.6.2 解釋執行模式下的處理767

13.6.3 機器碼執行模式下的處理770

13.6.4 Heap AllocObjectWith-Allocator773

13.7 細觀Space779

13.7.1 Space類779

13.7.2 ContinuousSpace和Discon-tinuousSpace類781

13.7.3 MemMapSpace和Continuous MemMapAllocSpace類782

13.7.4 MallocSpace類783

13.8 Heap學習之二784

13.8.1 Heap構造函數784

13.8.2 關鍵類介紹792

13.8.3 ObjectVisitReferences806

13.9 總結812

第14章 ART中的GC813

14.1 GC基礎知識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 關鍵數據結構821

14.2.2 Thread VisitRoots824

14.3 ART GC概覽827

14.3.1 關鍵數據結構827

14.3.2 ART GC選項830

14.3.3 創建回收器和設置回收策略832

14.4 MarkSweep835

14.4.1 Heap相關成員變量取值情況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小結869

14.5 ConcurrentCopying870

14.5.1 InitalizePhase871

14.5.2 FlipThreadRoots873

14.5.3 MarkingPhase881

14.5.4 ReclaimPhase883

14.5.5ConcurrentCopying小結885

14.6 MarkCompact885

14.6.1 MarkingPhase886

14.6.2 ReclaimPhase889

14.6.3 MarkCompact小結891

14.7 SemiSpace892

14.7.1 InitializePhase893

14.7.2 MarkingPhase894

14.7.3 SemiSpace小結898

14.8 Java Reference對象的處理899

14.8.1 基礎知識899

14.8.2 MarkSweep中Reference對象的處理903

14.8.3ReferenceProcessor904

14.8.4 PhantomReference的處理912

14.8.5 finalize函數的調用913

14.8.6 Reference處理小結917

14.9 Heap學習之三917

14.9.1 Heap Trim917

14.9.2 CollectGarbageInternal919

14.9.3 PreZygoteFork924

14.9.4 內存碎片的解決926

14.10 總結927

14.11 參考資料928

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 882
海外經銷商無庫存,到貨日平均30天至45天

暢銷榜

客服中心

收藏

會員專區