揭秘Java虛擬機 JVM設計原理與實現pdf

圖書網
圖書網
圖書網
10905
文章
1661
評論
2019年9月21日23:33:39 8 496

揭秘Java虛擬機 JVM設計原理與實現 內容簡介

《揭秘Java虛擬機:JVM設計原理與實現》從源碼角度解讀HotSpot的內部實現機制,本版本主要包含三大部分——JVM數據結構設計與實現、執行引擎機制及內存分配模型。

數據結構部分包括Java字節碼文件格式、常量池解析、字段解析、方法解析。每一部分都給出詳細的源碼實現分析,例如字段解析一章,從源碼層面詳細分析了Java字段重排、字段繼承等關鍵機制。再如方法解析一章,給出了Java多態特性在源碼層面的實現方式。《揭秘Java虛擬機:JVM設計原理與實現》通過直接對源代碼的分析,從根本上梳理和澄清Java領域中的關鍵概念和機制。

執行引擎部分包括Java方法調用機制、棧幀創建機制、指令集架構與解釋器實現機制。這一話題是《揭秘Java虛擬機:JVM設計原理與實現》技術含量高的部分,需要讀者具備一定的匯編基礎。不過千萬不要被“匯編”這個詞給嚇著,其實在作者看來,匯編相比于高級語言而言,語法非常簡單,語義也十分清晰。執行引擎部分重點描述Java源代碼如何轉換為字節碼,又如何從字節碼轉換為機器指令從而能夠被物理CPU所執行的技術實現。同時詳細分析了Java函數堆棧的創建全過程,在源碼分析的過程中,帶領讀者從本質上理解到底什么是Java函數堆棧和棧幀,以及棧幀內部的詳細結構。

內存分配部分主要包括類型創建與加載、對象實例創建與內存分配,例如new關鍵字的工作機制,import關鍵字的作用,再如java.lang.ClassLoader.loadClass()接口的本地實現機制。

《揭秘Java虛擬機:JVM設計原理與實現》并不是簡單地分析源碼實現,而是在描述HotSpot內部實現機制的同時,分析了HotSpot如此這般實現的技術必然性。讀者在閱讀《揭秘Java虛擬機:JVM設計原理與實現》的過程中,將會在很多地方看到作者本人的這種思考。

揭秘Java虛擬機 JVM設計原理與實現 目錄

前言

第1章 Java虛擬機概述

1.1 從機器語言到Java——詹爺,你好

1.2 兼容的選擇:一場生產力的革命

1.3 中間語言翻譯

1.3.1 從中間語言翻譯到機器碼

1.3.2 通過C程序翻譯

1.3.3 直接翻譯為機器碼

1.3.4 本地編譯

1.4 神奇的指令

1.4.1 常見匯編指令

1.4.2 JVM指令

1.5 本章總結

第2章 Java執行引擎工作原理:方法調用

2.1 方法調用

2.1.1 真實的機器調用

2.1.2 C 語言函數調用

2.2 JVM 的函數調用機制

2.3 函數指針

2.4 CallStub 函數指針定義

2.5 _call_stub_entry例程

2.6 本章總結

第3章 Java數據結構與面向對象

3.1 從Java算法到數據結構

3.2 數據類型簡史

3.3 Java 數據結構之偶然性

3.4 Java類型識別

3.4.1 class字節碼概述

3.4.2 魔數與JVM內部的int類型

3.4.3 常量池與JVM內部對象模型

3.5 大端與小端

3.5.1 大端和小端的概念

3.5.2 大小端產生的本質原因

3.5.3 大小端驗證

3.5.4 大端和小端產生的場景

3.5.5 如何解決字節序反轉

3.5.6 大小端問題的避免

3.5.7 JVM 對字節碼文件的大小端處理

3.6 本章總結

第4章 Java字節碼實戰

4.1 字節碼格式初探

4.1.1 準備測試用例

4.1.2 使用javap命令分析字節碼文件

4.1.3 查看字節碼二進制

4.2 魔數與版本

4.2.1 魔數

4.2.2 版本號

4.3 常量池

4.3.1 常量池的基本結構

4.3.2 JVM 所定義的11種常量

4.3.3 常量池元素的復合結構

4.3.4 常量池的結束位置

4.3.5 常量池元素總數量

4.3.6 第一個常量池元素

4.3.7 第二個常量池元素

4.3.8 父類常量

4.3.9 變量型常量池元素

4.4 訪問標識與繼承信息

4.4.1 access_flags

4.4.2 this_class

4.4.3 super_class

4.4.4 interface

4.5 字段信息

4.5.1 fields_count

4.5.2 field_info fields[fields_count]

4.6 方法信息

4.6.1 methods_count

4.6.2 method_info methods[methods_count]

4.7 本章回顧

第5章 常量池解析

5.1 常量池內存分配

5.1.1 常量池內存分配總體鏈路

5.1.2 內存分配

5.1.3 初始化內存

5.2 oop-klass模型

5.2.1 兩模型三維度

5.2.2 體系總覽

5.2.3 oop體系

5.2.4 klass體系

5.2.5 handle體系

5.2.6 oop 、klass、handle的相互轉換

5.3 常量池klass模型(1)

5.3.1 klassKlass實例構建總鏈路

5.3.2 為klassOop申請內存

5.3.3 klassOop內存清零

5.3.4 初始化mark

5.3.5 初始化klassOop._metadata

5.3.6 初始化klass

5.3.7 自指

5.4 常量池klass模型(2)

5.4.1 constantPoolKlass模型構建

5.4.2 constantPoolOop 與klass

5.4.3 klassKlass終結符

5.5 常量池解析

5.5.1 c onstantPoolOop域初始化

5.5.2 初始化tag

5.5.3 解析常量池元素

5.6 本章總結

第6章 類變量解析

6.1 類變量解析

6.2 偏移量

6.2.1 靜態變量偏移量

6.2.2 非靜態變量偏移量

6.2.3 Java 字段內存分配總結

6.3 從源碼看字段繼承

6.3.1 字段重排與補白

6.3.2 private 字段可被繼承嗎

6.3.3 使用HSDB驗證字段分配與繼承

6.3.4 引用類型變量內存分配

6.4 本章總結

第7章 Java棧幀

7.1 entry_point例程生成

7.2 局部變量表創建

7.2.1 c onstMethod的內存布局

7.2.2 局部變量表空間計算

7.2.3 初始化局部變量區

7.3 堆棧與棧幀

7.3.1 棧幀是什么

7.3.2 硬件對堆棧的支持

7.3.3 棧幀開辟與回收

7.3.4 堆棧大小與多線程

7.4 JVM的棧幀

7.4.1 JVM 棧幀與大小確定

7.4.2 棧幀創建

7.4.3 局部變量表

7.5 棧幀深度與slot復用

7.6 最大操作數棧與操作數棧復用

7.7 本章總結

第8章 類方法解析

8.1 方法簽名解析與校驗

8.2 方法屬性解析

8.2.1 code屬性解析

8.2.2 L VT&LVTT

8.3 創建methodOop

8.4 Java 方法屬性復制

8.5 〈clinit〉與〈init〉

8.6 查看運行時字節碼指令

8.7 vtable

8.7.1 多態

8.7.2 C++中的多態與vtable

8.7.3 Java 中的多態實現機制

8.7.4 vtable 與invokevirtual指令

8.7.5 HSDB 查看運行時vtable

8.7.6 miranda方法

8.7.7 vtable特點總結

8.7.8 vtable 機制邏輯驗證

8.8 本章總結

第9章 執行引擎

9.1 執行引擎概述

9.2 取指

9.2.1 指令長度

9.2.2 JVM 的兩級取指機制

9.2.3 取指指令放在哪

9.2.4 程序計數器在哪里

9.3 譯碼

9.3.1 模板表

9.3.2 匯編器

9.3.3 匯編

9.4 棧頂緩存

9.5 棧式指令集

9.6 操作數棧在哪里

9.7 棧幀重疊

9.8 entry_point 例程機器指令

9.9 執行引擎實戰

9.9.1 一個簡單的例子

9.9.2 字節碼運行過程分析

9.10 字節碼指令實現

9.10.1 iconst_3

9.10.2 istore_0

9.10.3 iadd

9.11 本章總結

第10章 類的生命周期

10.1 類的生命周期概述

10.2 類加載

10.2.1 類加載——鏡像類與靜態字段

10.2.2 Java 主類加載機制

10.2.3 類加載器的加載機制

10.2.4 反射加載機制

10.2.5 import 與new指令

10.3 類的初始化

10.4 類加載器

10.4.1 類加載器的定義

10.4.2 系統類加載器與擴展類加載器創建

10.4.3 雙親委派機制與破壞

10.4.4 預加載

10.4.5 引導類加載

10.4.6 加載、鏈接與延遲加載

10.4.7 父加載器

10.4.8 加載器與類型轉換

10.5 類實例分配

10.5.1 棧上分配與逃逸分析

10.5.2 TLAB

10.5.3 指針碰撞與eden區分配

10.5.4 清零

10.5.5 偏向鎖

10.5.6 壓棧與取指

10.6 本章總結

揭秘Java虛擬機 JVM設計原理與實現 精彩文摘

1.通過編譯器實現兼容

例如 C、C++等編程語言,既能運行于 Linux 操作系統,也能運行于 Windows 操作系統;既能運行于 x86 平臺,也能運行于 AMD 平臺。這種能力并不是編程語言本身所具備的,而是由編譯器所賦予。針對不同的硬件平臺和操作系統,開發特定的編譯器,編譯器能夠將同樣一段 C/C++程序翻譯成與目標平臺匹配的機器指令,從而實現編程語言的兼容性。

但是通過編譯器實現兼容性時,如果涉及系統調用,往往都需要修改程序,調用特定系統的特定 API,否則程序遷移到新的平臺上之后,無法運行。

圖書網:揭秘Java虛擬機 JVM設計原理與實現pdf

繼續閱讀

說出你想要的,我們幫你找→→→社區

  • 我的微信
  • 掃一掃加好友
  • weinxin
  • 微信公眾號
  • 掃一掃關注
  • weinxin
C++覆轍錄pdf 程序設計

C++覆轍錄pdf

C++覆轍錄 作者:(美)STEPHEN C. DEWHURST C++覆轍錄 出版社:人民郵電出版社 C++覆轍錄 內容簡介 《C++覆轍錄》是C++大師Stephen C. Dewhurst根據多...
JRockit權威指南 深入理解JVMpdf 程序設計

JRockit權威指南 深入理解JVMpdf

作為曾經的三大主流Java虛擬機之一,JRockit展示了強大的伸縮性和高勁的性能,現在雖已被內置于Oracle融合中間件中,但JVM原理以及JMC工具等內容是相通的。 本書由JR...
iOS 11 開發指南pdf 程序設計

iOS 11 開發指南pdf

iOS 11 開發指南 作者:管蕾 iOS 11 開發指南 出版社:人民郵電出版社 iOS 11 開發指南 內容簡介 本書循序漸進地講解了iOS 11應用開發的知識。書中從搭建開發環境講起,依次講解了...
零起點Python足彩大數據與機器學習實盤分析pdf 程序設計

零起點Python足彩大數據與機器學習實盤分析pdf

適讀人群 : 足球愛好者、博彩愛好者,數據分析從業人員、數學、統計、計算機專業學生。 采用MBA個案模式,配合Python教學代碼,由淺入深,結合實盤案例,舉一反三。無須專業編程基...
匿名

發表評論

匿名網友 填寫信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

評論:8   其中:訪客  8   博主  0
    • health health 9

      支持,加油

      • 星兒 星兒 9

        可以長期使用的一本書,謝謝

        • 123 123 9

          不錯

          • 李銳 李銳 9

            好書,找了很久才找到

            • 。。。。。 。。。。。 9

              超厲害的耶( ?? ω ?? )y

              • gylang gylang 9

                支持一下

                • hili hili 9

                  支持

                  • lycon lycon 9

                    好資源頂一個