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

GraalVM與Java靜態編譯(原理與應用)/Java核心技術系列

  • 作者:林子熠|責編:陳潔
  • 出版社:機械工業
  • ISBN:9787111696391
  • 出版日期:2022/01/01
  • 裝幀:平裝
  • 頁數:200
人民幣:RMB 89 元      售價:
放入購物車
加入收藏夾

內容大鋼
    本書作者是阿里靜態編譯研究團隊的核心成員,曾任華為高級工程師,一直從事靜態編譯技術的研究與落地。本書得到業界多位知名專家的鼎力推薦,是深度、系統研究Java靜態編譯技術的鮮見資料。閱讀本書,讀者可以了解Java靜態編譯技術的特點、實現機制、優缺點等,以將其應用到自己的業務實踐中。
    本書分為三部分,具體內容如下。
    第一部分(第1?4章)首先概要介紹Java編譯器的演進過程,然後介紹Java靜態編譯的基本原理、總體能力和發展前景,主要向讀者說明Java靜態編譯技術是什麼、業界主流實現方案、GraalVM結構及靜態編譯應用的流程。
    第二部分(第5?12章)詳細介紹GraalVM如何實現Java的靜態編譯,著重介紹如何支持現有Java特性,涵蓋靜態編譯的總體流程、重要機制(擴展、替換、類提前初始化優化機制)、動態特性(反射和序列化)實現、跨語言編程能力等。讀者可以掌握GraalVM對Java靜態編譯技術的具體實現原理,了解動態的Java特性是如何被靜態化支持的,洞悉靜態編譯本質。
    第三部分(第13?15章)主要關注GraalVM的實踐應用,介紹如何將傳統Java應用編譯為二進位可執行文件或靜態庫文件並部署上雲,以及與傳統的Java程序完全不同的編譯調試技術。讀者可以獲悉靜態編譯實踐中常見問題的解決方案,以更快擁有靜態編譯技術的應用實踐能力。

作者介紹
林子熠|責編:陳潔
    林子熠,博士,阿里巴巴集團技術專家,曾任華為技術有限公司高級軟體開發工程師。專註于Java靜態編譯方向,主要負責Java靜態編譯技術在阿里巴巴生態中的應用,並以落地實踐中發現的問題為切入點,向GraalVM社區貢獻了多項重要特性,是GraalVM社區建設的積极參与者;曾作為核心人員,負責將華為方舟編譯器前端的Java位元組碼和ArtDex位元組碼轉換為方舟中間語言的開發工作;曾受邀作為上海JUG2019報告嘉賓和北京QCon2020報告嘉賓,介紹GraalVM靜態編譯技術;曾在編譯器領域國際頂級學術會議CGO 2021的Graal專項論壇中報告對Java序列化特性的靜態編譯支持實現。

目錄
  序
前言
第一部分  從解釋執行到靜態編譯:Java的編譯發展之路
  第1章  Java靜態編譯技術的誕生
    1.1  Java程序的運行生命周期
      1.1.1  初始化
      1.1.2  程序預熱
    1.2  冷啟動問題
    1.3  初識Java靜態編譯技術
      1.3.1  什麼是Java靜態編譯
      1.3.2  靜態編譯的優勢
      1.3.3  靜態編譯的局限性
    1.4  小結
  第2章  Java靜態編譯的業界實現
    2.1  Oracle GraalVM
      2.1.1  GraalVM是什麼
      2.1.2  GraalVM靜態編譯優點
      2.1.3  GraalVM靜態編譯缺點
      2.1.4  GraalVM發展分析
    2.2  華為方舟編譯器
    2.3  小結
  第3章  GraalVM整體結構
    3.1  子項目與組件
    3.2  GraalVM編譯系統工具mx
    3.3  在IDE中打開GraalVM
    3.4  小結
  第4章  從Java程序到本地代碼:靜態編譯應用流程
    4.1  獲取GraalVM JDK
      4.1.1  下載發布版
      4.1.2  下載Docker鏡像
    4.2  從源碼編譯
      4.2.1  編譯準備
      4.2.2  編譯
    4.3  獲取依賴庫
    4.4  預執行目標應用程序
    4.5  靜態編譯目標應用程序
      4.5.1  命令行模式編譯
      4.5.2  配置文件模式
      4.5.3  Maven插件模式
      4.5.4  Gradle插件模式
    4.6  靜態編譯Java程序實例
      4.6.1  靜態編譯HelloWorld
      4.6.2  靜態編譯Spring Boot應用實例
    4.7  小結
第二部分  靜態編譯實現原理
  第5章  Substrate VM靜態編譯框架
    5.1  靜態編譯啟動器
    5.2  靜態編譯實現流程
      5.2.1  類載入
      5.2.2  準備

      5.2.3  靜態分析
      5.2.4  全局構建
      5.2.5  編譯
      5.2.6  生成image
      5.2.7  寫文件
    5.3  Substrate VM運行時支持
      5.3.1  內存管理
      5.3.2  系統信號處理機制
    5.4  小結
  第6章  Feature機制
    6.1  Feature機制概覽
    6.2  Feature管理
      6.2.1  註冊與調用Feature
      6.2.2  Feature依賴
    6.3  Feature影響編譯流程
      6.3.1  Feature函數的入參回調
      6.3.2  訪問ImageSingletons單例庫
    6.4  GraalFeature實現靜態編譯優化
      6.4.1  GraalVM編譯器基礎知識
      6.4.2  擴展lowering
      6.4.3  註冊圖的擴展插件
    6.5  Feature介面函數
    6.6  小結
  第7章  編譯時替換機制
    7.1  替換機制在Substrate VM中的應用
    7.2  基於註解的替換
      7.2.1  替換類
      7.2.2  替換枚舉類型
      7.2.3  替換函數
      7.2.4  替換構造函數
      7.2.5  替換類中的域
      7.2.6  替換類的靜態初始化函數
    7.3  實現原理
      7.3.1  替換機制責任鏈
      7.3.2  確定待替換元素集合
      7.3.3  自定義替換內容
    7.4  小結
  第8章  類提前初始化優化
    8.1  Java中的類初始化
    8.2  編譯時的類初始化
      8.2.1  類提前初始化的性能分析
      8.2.2  類提前初始化的安全性分析
    8.3  優化實現原理
      8.3.1  早期階段分析
      8.3.2  中期階段分析
      8.3.3  後期階段分析
    8.4  手動設置類初始化時機
    8.5  小結
  第9章  反射的實現與優化
    9.1  反射在傳統Java中的實現

    9.2  基於配置的支持
      9.2.1  反射配置文件
      9.2.2  配置局限性
    9.3  Substrate VM的反射實現
      9.3.1  解析配置並註冊反射信息
      9.3.2  反射函數常量摺疊優化
      9.3.3  函數反射調用過程優化
    9.4  其他類似動態特性的支持
      9.4.1  JNI調用
      9.4.2  動態代理
      9.4.3  資源訪問
      9.4.4  序列化特性
    9.5  小結
  第10章  序列化
    10.1  序列化特性的JDK原生實現
      10.1.1  序列化/反序列化基本流程
      10.1.2  序列化中的靜態編譯不友好特性
    10.2  靜態編譯的序列化實現
      10.2.1  解決動態類載入問題
      10.2.2  解決new抽象類問題
      10.2.3  靜態初始化函數檢查
    10.3  局限性
    10.4  小結
  第11章  跨語言編程:用Java語言編寫共享庫
    11.1  樣例項目cinterfacetutorial
    11.2  共享庫的Java實現源碼解析
      11.2.1  聲明共享庫上下文
      11.2.2  實現C基本數據結構
      11.2.3  實現C的結構體繼承
      11.2.4  暴露共享庫API
      11.2.5  直接調用C函數
      11.2.6  共享庫函數的返回值
    11.3  靜態編譯JNI共享庫
      11.3.1  JNIDemo項目組織結構
      11.3.2  JNI庫API函數的聲明
      11.3.3  JNI函數編程基本過程
      11.3.4  JNI函數參數傳入String
      11.3.5  自定義JNI函數指針類型
      11.3.6  調用Java函數
    11.4  小結
  第12章  CLibrary機制
    12.1  isolate
      12.1.1  錯誤的多線程調用:簡單復用isolate
      12.1.2  正確的多線程調用:為每個線程新建isolate
      12.1.3  正確的多線程調用:映射線程與isolate
    12.2  WordBase介面系統
    12.3  註解系統
      12.3.1  @CContext註解
      12.3.2  @CEntryPoint註解
      12.3.3  @InvokeCFunctionPointer註解

    12.4  正確釋放內存
    12.5  小結
第三部分  靜態編譯實戰
  第13章  靜態編譯Serverless應用到阿里雲函數計算平台
    13.1  阿里雲函數計算平台
    13.2  靜態編譯基於Micronaut的Spring-Boot示例項目
    13.3  部署到阿里雲
    13.4  性能比較
    13.5  小結
  第14章  native-image-agent的實現
    14.1  native-image-agent與JVMTI
    14.2  實現靜態編譯的JVMTI Agent
    14.3  native-image-agent的可用選項
    14.4  小結
  第15章  調試
    15.1  編譯debug版本的native image
    15.2  使用GDB調試native image
      15.2.1  啟動GDB
      15.2.2  增加函數斷點
      15.2.3  GDB TUI分屏界面
      15.2.4  單步調試
      15.2.5  查看Java對象的值
    15.3  小結

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們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