幫助中心 | 我的帳號 | 關於我們

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

  • 作者:鄧凡平
  • 出版社:機械工業
  • ISBN:9787111621225
  • 出版日期:2019/04/01
  • 裝幀:平裝
  • 頁數:928
人民幣:RMB 169 元      售價:
放入購物車
加入收藏夾

內容大鋼
    鄧凡平著的《深入理解Android(Java虛擬機ART)》是一部從源碼角度分析和講解Androld虛擬機ART的鴻篇巨著,核心內容和價值體現在3個方面:
    第一,細緻、深入地分析了ART虛擬機的架構、設計與實現原理,能讓讀者對ART虛擬機有透徹了解;
    第二,能讓Android系統工程師和應用工程師從底層了解整個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虛擬機中與編譯和Runtlme相關的大量知識,這是虛擬機的核心和難點;
    第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:卷Ⅰ》(2011年)     《深入理解Android:卷Ⅱ》(2012年)     《深入理解Android:Wi-Fi、NFC和GPS卷》(2014年)

目錄
推薦序
前言
第1章  本書必讀
  1.1  概述
  1.2  準備環境和工具
    1.2.1  準備源代碼
    1.2.2  準備Source Insight
    1.2.3  準備模擬器和自製系統鏡像
    1.2.4  小結
  1.3  本書的內容
  1.4  本書資源下載說明
第2章  深入理解Class文件格式
  2.1  Class文件格式總覽
  2.2  常量池及相關內容
    2.2.1  常量項的類型和關係
    2.2.2  信息描述規則
    2.2.3  常量池實例剖析
  2.3  field_info和method_info
  2.4  access_flags介紹
  2.5  屬性介紹
    2.5.1  屬性概貌
    2.5.2  Code屬性
    2.5.3  LineNumberTable屬性
    2.5.4  LocalVariableTable屬性
  2.6  Java指令碼介紹
    2.6.1  指令碼和助記符
    2.6.2  如何閱讀規範
  2.7  學習路線推薦
  2.8  參考資料
第3章  深入理解Dex文件格式
  3.1  Dex文件格式總覽
    3.1.1  Dex和Class文件格式的區別
    3.1.2  Dex文件格式的概貌
  3.2  認識Dex文件
    3.2.1  header_item
    3.2.2  string_id_item等
    3.2.3  class_def
    3.2.4  code_item
  3.3  Dex指令碼介紹
    3.3.1  insns的組織形式
    3.3.2  指令碼描述規則
  3.4  學習路線推薦
  3.5  參考資料
第4章  深入理解ELF文件格式
  4.1  概述
  4.2  ELF文件格式介紹
    4.2.1  ELF文件頭結構介紹
    4.2.2  Linking View下的ELF
    4.2.3  Execution View下的ELF
    4.2.4  實例分析:調用動態庫中的函數

    4.2.5  ELF總結
  4.3  學習路線推薦
  4.4  參考資料
第5章  認識C++
  5.1  數據類型
    5.1.1  基本內置數據類型介紹
    5.1.2  指針、引用和void類型
    5.1.3  字元和字元串
    5.1.4  數組
  5.2  C++源碼構成及編譯
    5.2.1  頭文件示例
    5.2.2  源文件示例
    5.2.3  編譯
  5.3  Class介紹
    5.3.1  構造、賦值和析構函數
    5.3.2  類的派生和繼承
    5.3.3  友元和類的前向聲明
    5.3.4  explicit構造函數
    5.3.5  C++中的struct
  5.4  操作符重載
    5.4.1  操作符重載的實現方式
    5.4.2  輸出和輸入操作符重載
    5.4.3  ->和*操作符重載
    5.4.4  new和delete操作符重載
    5.4.5  函數調用運算符重載
  5.5  函數模板與類模板
    5.5.1  函數模板
    5.5.2  類模板
  5.6  lambda表達式
  5.7  STL介紹
    5.7.1  string類
    5.7.2  容器類
    5.7.3  演算法和函數對象介紹
    5.7.4  智能指針類
    5.7.5  探討STL的學習
  5.8  其他常用知識
    5.8.1  initializer_list
    5.8.2  帶作用域的enum
    5.8.3  constexpr
    5.8.4  static_assert
  5.9  參考資料
第6章  編譯dex位元組碼為機器碼
  6.1  編譯器全貌介紹
  6.2  編譯器前端介紹
    6.2.1  詞法分析和lex
    6.2.2  語法分析和yacc
    6.2.3  語義分析和IR生成介紹
  6.3  優化器介紹
    6.3.1  構造CFG
    6.3.2  分析和處理CFG

    6.3.3  數據流分析與SSA
    6.3.4  IR優化
  6.4  ART中的IR—HInstruction
    6.4.1  ART中的IR
    6.4.2  IR之間的關係
    6.4.3  ART IR對象的初始化
  6.5  寄存器分配
    6.5.1  LSRA介紹
    6.5.2  LSRA相關代碼介紹
  6.6  機器碼生成相關代碼介紹
    6.6.1  GenerateFrameEntry
    6.6.2  VisitAdd和VisitInstance-FieldGet
    6.6.3  GenerateSlowPaths
  6.7  總結
  6.8  參考資料
第7章  虛擬機的創建
  7.1  概述
    7.1.1  JniInvocation Init函數介紹
    7.1.2  AndroidRuntime startVm函數介紹
  7.2  Runtime Create介紹
    7.2.1  Create函數介紹
    7.2.2  Init函數介紹
  7.3  MemMap與OatFileManager
    7.3.1  MemMap介紹
    7.3.2  OatFileManager介紹
  7.4  FaultManager介紹
    7.4.1  信號處理和SignalAction介紹
    7.4.2  FaultManager介紹
  7.5  Thread介紹
    7.5.1  Startup函數介紹
    7.5.2  Attach函數介紹
  7.6  Heap學習之一
    7.6.1  初識Heap中的關鍵類
    7.6.2  Heap構造函數第一部分
  7.7  JavaVMExt和JNIEnvExt
    7.7.1  JavaVMExt
    7.7.2  JNIEnvExt
    7.7.3  總結
  7.8  ClassLinker
    7.8.1  關鍵類介紹
    7.8.2  ClassLinker構造函數
    7.8.3  InitFromBootImage
    7.8.4  ClassLinker總結
  7.9  總結和閱讀指導
第8章  虛擬機的啟動
  8.1  Runtime Start
  8.2  初識JNI
    8.2.1  JNI中的數據類型
    8.2.2  ScopedObjectAccess等輔助類
    8.2.3  常用JNI函數介紹

  8.3  Jit LoadCompilerLibrary
  8.4  Runtime InitNativeMethods
    8.4.1  JniConstants Init
    8.4.2  RegisterRuntimeNative Methods
    8.4.3  WellKnownClasses Init和LastInit
  8.5  Thread相關
    8.5.1  Runtime InitThreadGroups
    8.5.2  Thread FinishSetup
    8.5.3  Runtime StartDaemonThreads
  8.6  Runtime CreateSystemClassLoader
  8.7  類的載入、鏈接和初始化
    8.7.1  關鍵類介紹
    8.7.2  SetupClass
    8.7.3  LoadClass相關函數
    8.7.4  LinkClass相關函數
    8.7.5  DefineClass
    8.7.6  Verify相關函數
    8.7.7  Initialize相關函數
    8.7.8  ClassLinker中其他常用函數
    8.7.9  ClassLoader介紹
  8.8  虛擬機創建和啟動關鍵內容梳理
第9章  深入理解dex2oat
  9.1  概述
  9.2  ParseArgs介紹
    9.2.1  CompilerOptions類介紹
    9.2.2  ProcessOptions函數介紹
    9.2.3  InsertCompileOptions函數介紹
  9.3  OpenFile介紹
  9.4  Setup介紹
    9.4.1  Setup代碼分析之一
    9.4.2  Setup代碼分析之二
    9.4.3  Setup代碼分析之三
    9.4.4  Setup代碼分析之四
  9.5  CompileImage
    9.5.1  Compile
    9.5.2  ArtCompileDEX
    9.5.3  OptimizingCompiler JniCompile
    9.5.4  OptimizingCompiler Compile
  9.6  OAT和ART文件格式介紹
    9.6.1  OAT文件格式
    9.6.2  ART文件格式
    9.6.3  oatdump介紹
  9.7  總結
第10章  解釋執行和JIT
  10.1  基礎知識
    10.1.1  LinkCode
    10.1.2  Runtime ArtMethod
    10.1.3  棧和參數傳遞
  10.2  解釋執行
    10.2.1  art_quick_to_interpreter_bridge

    10.2.2  artQuickToInterpreter-Bridge
    10.2.3  EnterInterpreterFromEntry-Point
    10.2.4  調用棧的管理和遍歷
  10.3  ART中的JIT
    10.3.1  Jit、JitCodeCache等
    10.3.2  JIT閾值控制與處理
    10.3.3  OSR的處理
  10.4  HDeoptimize的處理
    10.4.1  VisitDeoptimize相關
    10.4.2  QuickExceptionHandler相關
    10.4.3  解釋執行中關於Deoptimize的處理
  10.5  Instrumentation介紹
    10.5.1  MethodEnterEvent和MethodExitEvent
    10.5.2  DexPcMovedEvent
  10.6  異常投遞和處理
    10.6.1  拋異常
    10.6.2  異常處理
  10.7  總結
第11章  ART中的JNI
  11.1  JavaVM和JNIEnv
    11.1.1  JavaVMExt相關介紹
    11.1.2  JNIEnvExt介紹
  11.2  Java native方法的調用
    11.2.1  art_jni_dlsym_lookup_stub
    11.2.2  art_quick_generic_jni_trampoline
  11.3  CallStaticVoidMethod
  11.4  JNI中引用型對象的管理
    11.4.1  關鍵類介紹
    11.4.2  JniMethodStart和JniMethod-End
    11.4.3  IndirectReferenceTable相關函數
    11.4.4  NewObject和jobject的含義
    11.4.5  JNI中引用對象相關
    11.4.6  PushLocalFrame和PopLocalFrame
    11.4.7  回收引用對象
  11.5  總結
第12章  CheckPoints、線程同步及信號處理
  12.1  CheckPoints介紹
    12.1.1  設置Check Point標誌位
    12.1.2  Check Points的設置
    12.1.3  執行檢查點處的任務
  12.2  ThreadList和ThreadState
    12.2.1  線程ID
    12.2.2  RunCheckpoint和Dump
    12.2.3  SuspendAll和ResumeAll
    12.2.4  Thread狀態切換
  12.3  線程同步相關知識
    12.3.1  關鍵類介紹
    12.3.2  synchronized的處理
    12.3.3  Object wait、notifyAll等
  12.4  volatile成員的讀寫

    12.4.1  基礎知識
    12.4.2  解釋執行模式下的處理
    12.4.3  機器碼執行模式的處理
  12.5  信號處理
    12.5.1  zygote進程的處理
    12.5.2  非zygote進程的處理
  12.6  總結
第13章  內存分配與釋放
  13.1  Space等關鍵類介紹
  13.2  ZygoteSpace
  13.3  BumpPointerSpace和RegionSpace
    13.3.1  BumpPointerSpace
    13.3.2  RegionSpace
  13.4  DlMallocSpace和RosAlloc-Space
    13.4.1  DlMallocSpace
    13.4.2  RosAllocSpace
    13.4.3  rosalloc介紹
  13.5  LargeObjectMapSpace
  13.6  new-instance/array指令的處理
    13.6.1  設置內存分配器
    13.6.2  解釋執行模式下的處理
    13.6.3  機器碼執行模式下的處理
    13.6.4  Heap AllocObjectWith-Allocator
  13.7  細觀Space
    13.7.1  Space類
    13.7.2  ContinuousSpace和Discon-tinuousSpace類
    13.7.3  MemMapSpace和Continuous MemMapAllocSpace類
    13.7.4  MallocSpace類
  13.8  Heap學習之二
    13.8.1  Heap構造函數
    13.8.2  關鍵類介紹
    13.8.3  ObjectVisitReferences
  13.9  總結
第14章  ART中的GC
  14.1  GC基礎知識
    14.1.1  Mark-Sweep Collection原理介紹
    14.1.2  Copying Collection原理介紹
    14.1.3  Mark-Compact Collection原理介紹
    14.1.4  其他概念
  14.2  Runtime VisitRoots
    14.2.1  關鍵數據結構
    14.2.2  Thread VisitRoots
  14.3  ART GC概覽
    14.3.1  關鍵數據結構
    14.3.2  ART GC選項
    14.3.3  創建回收器和設置回收策略
  14.4  MarkSweep
    14.4.1  Heap相關成員變數取值情況
    14.4.2  MarkSweep概貌
    14.4.3  MarkingPhase

    14.4.4  PausePhase
    14.4.5  ReclaimPhase
    14.4.6  FinishPhase
    14.4.7  PartialMarkSweep
    14.4.8  StickyMarkSweep
    14.4.9  Concurrent MarkSweep
    14.4.10  Parallel GC
    14.4.11  MarkSweep小結
  14.5  ConcurrentCopying
    14.5.1  InitalizePhase
    14.5.2  FlipThreadRoots
    14.5.3  MarkingPhase
    14.5.4  ReclaimPhase
    14.5.5  ConcurrentCopying小結
  14.6  MarkCompact
    14.6.1  MarkingPhase
    14.6.2  ReclaimPhase
    14.6.3  MarkCompact小結
  14.7  SemiSpace
    14.7.1  InitializePhase
    14.7.2  MarkingPhase
    14.7.3  SemiSpace小結
  14.8  Java Reference對象的處理
    14.8.1  基礎知識
    14.8.2  MarkSweep中Reference對象的處理
    14.8.3  ReferenceProcessor
    14.8.4  PhantomReference的處理
    14.8.5  finalize函數的調用
    14.8.6  Reference處理小結
  14.9  Heap學習之三
    14.9.1  Heap Trim
    14.9.2  CollectGarbageInternal
    14.9.3  PreZygoteFork
    14.9.4  內存碎片的解決
  14.10  總結
  14.11  參考資料

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032