Java电子书:虚拟机设计与实现 以JVM为例 PDF 电子书 Java吧 java8.com
' F. d" \2 }6 L7 y) r) j4 h* h0 k. V0 }/ D6 r
作者:[中]李晓峰(Xiao-Feng Li)出版社:人民邮电出版社出版时间:2020年01月
) V" L( \0 Y$ o/ u. M& \ {3 k# G& X! e$ q4 \
编号:166-Java吧资源免费-X0234【Java吧 java8.com】
/ v. f) {. U0 r1 ^' A! O
7 `( p$ f5 A4 w- z. t
8 E4 w8 n; a/ [! e* k0 w4 Y
' l1 p" ]: D1 g" {4 ~# `; h6 q目录:
# P# c: u- N- U第 一部分 虚拟机基础( E/ e3 \) Z6 }! s4 W* e7 a6 f
6 u: l: R s. l {
第 1章 虚拟机简介 2
5 ~! O6 X p G$ f1 K
4 O% p7 G4 q4 Z0 E1.1 虚拟机类型 2
: v' g3 ~3 e% L$ ?: t, f# X6 v
, h( s i5 z& F6 [9 P1.2 为什么需要虚拟机 3
4 E E- ]2 u% D* z0 B
( s( u( y: M+ j9 [: W1 ~/ _1.3 虚拟机示例 4# w# v) {3 x) K9 B( w* P
, u; d7 g& J+ n6 }# _" v w
1.3.1 JavaScript引擎 4+ J6 D T6 ^& c0 X
8 L5 k; I$ B) e( p! k1 S1 p9 d7 z
1.3.2 Perl引擎 5
0 J7 v/ F" }0 [* ]9 n( v/ K. }$ \2 z! _
1.3.3 Android Java VM 5: b) i. J4 o) E- f
; C7 K. q3 L- Z. I) X$ _1.3.4 Apache Harmony 6
6 C, `+ `( w, ]
2 }) V& X. M5 _第 2章 虚拟机内部组成 7- y! ~, o L! l# h# M% B2 Q4 i
( S, Y8 h2 V& l2 I5 K) }
2.1 虚拟机核心组件 7
7 u f# t* O0 p/ U- Z7 u# ]/ H* v k: |3 c+ h$ K
2.1.1 加载器与动态链接器 73 u( u# a9 I$ e/ I/ ^
$ t( P b; U9 o' K; W- {. U) M
2.1.2 执行引擎 8
' q& J& k3 p8 L# x1 K W) f; p1 J" e
& x4 n* ^" D& s2.1.3 内存管理器 8: ^: X, q4 X/ p4 f. r
, L9 `. K$ g' ~) s- J7 k5 R: a
2.1.4 线程调度器 9
, h5 H$ e. M9 B" p$ U3 i9 @( N4 F' { Y, P) D: h% _
2.1.5 语言扩展 9
y3 h- E6 j8 v1 L& p+ i6 i4 T6 m/ o$ ?; _3 n9 E6 n$ \6 z
2.1.6 传统模型与虚拟机模型 10
/ v& ]& O# q r' E+ T+ E7 y. b7 g7 M" r8 x( [' G# W
2.2 虚拟ISA 11 a' u5 f* y; s; p6 ]7 Q3 ~. a. S
* l, L% k$ j1 j3 L2 u2.2.1 JVM 12
+ a* u6 \6 d; v) {* c' D2 B" W
2.2.2 JVM与CLR 15
9 Y; a* H0 j2 m" o1 I& Z- d4 x& p5 I+ Q( Y8 {6 G
第3章 虚拟机中的数据结构 17
% D9 C( G6 m- q7 Z
2 w% f2 u7 J0 V3.1 对象与类 177 _4 a0 p/ m6 U) k( U
6 O5 N3 x+ l' ~8 h+ p H1 n+ g) p# [
3.2 对象表示 18
! D d3 o! [" [- Y' q2 G* z9 R: a( I
3.3 方法描述 18
- f6 m" O9 |" C
8 o/ L/ Z4 b; j7 r: l/ \. X第二部分 虚拟机设计" x8 ^/ c2 D/ h8 D& M5 R
" h, Y( X; o6 T5 h0 W4 D第4章 执行引擎设计 22
( g7 u' ]: V7 I7 c S+ {* _
( t' w7 X8 S9 K2 H9 Y* @ }1 D4.1 解释器 228 k8 D' t4 j4 n. q# P' [
2 N9 I$ S9 c+ L4.1.1 超级指令 23% {" T7 v! J. [; Z% } M
2 ?: }# b+ D8 \) ^# P. V
4.1.2 选择性内联 23& @. @" u6 ]8 Z. l
% a8 |& P4 h+ Z2 i1 _3 o4.2 JIT编译 23
9 y4 N' q/ ]* F# _! w
- i" u. p0 v2 @* {6 d4.2.1 基于方法的JIT 24( J1 N; [: d/ x1 w/ D
. T2 N1 U+ f7 r4.2.2 基于踪迹的JIT 26
- Z2 l6 I$ E" ]* s" Q
0 P: I5 j% p r r6 x0 E. W4.2.3 基于区域的JIT 29/ Z* w1 ^( w Q, P* B
6 U3 J7 X- k+ c# D( h' c' B' C# u
4.3 解释器与JIT编译器的关系 30
6 G0 ~: j& t5 {, Z' b% i/ L% A k5 c2 J8 r3 I
4.4 AOT编译 315 m6 m9 b6 r( ^* y. T( p
9 I; D! O7 i6 `8 @& K+ q! H6 [+ \
4.5 编译时与运行时 33) W! R) j% O9 H; B
/ B. A/ s- L6 ~1 s. n5 Y" Z
第5章 垃圾回收设计 37) ]* A# U( F% F* u9 B4 C
) i9 w: h6 J# [$ j6 v+ H# P
5.1 对象生存期 37' P H ^' R! K0 I4 ^
D9 s! i4 _4 h, \0 L: x6 }
5.2 引用计数 38; T! o) C( y/ C; ~" Q+ Y
8 u) m4 D a; @! ^: u; W9 p7 i( l
5.3 对象追踪 40) Z% \* s4 S7 D6 ~$ l% W5 B- \
$ D( r# h0 b% V b5 Z
5.4 RC与对象追踪 42
) R5 S' R2 Z" n: q' G
# w& L) S0 g7 h/ |& s5.5 GC安全点 43* d$ f! H0 R4 e2 n! H" r
" h& @4 m) @1 b8 `3 @
5.6 常用追踪GC算法 45
8 |* q. z% O. U* n" d0 F2 x9 {4 y; x5 n3 j' x2 Y
5.6.1 标记清除 46+ W o. M( R2 Z: d: v
" R$ h2 ? O, ]5.6.2 追踪复制 46
# s: O1 |$ e: N# e2 b! i& Z7 V9 j) G! ~1 `
5.7 常用追踪GC变体 48
) y4 p5 S; \( l9 U" L8 g6 l% W" u$ I% P p2 |
5.7.1 标记压缩 48* h4 l( R* B# _# Y6 O* R
5 }' K% p, \1 ^
5.7.2 滑动压缩 48, v* l0 |% ?" U( B6 H
+ ?4 u+ l$ \' x1 {2 U* Y; |$ s$ u
5.7.3 追踪转发 49% _3 F, c6 e, K. O9 A* f: F' p9 h
; z0 F8 ~. n5 k. V
5.7.4 标记复制 503 C6 V- P5 l5 s& i: R8 `
4 N: }0 ~1 s# A; |8 \
5.7.5 分代式GC 50
& ?" E( A5 Q' ~
* v# E$ g0 j4 ^: d# q+ M5.8 移动式GC与非移动式GC 53" l1 L; U( `1 l' `
" D% M6 a* P: }' k( T" q
5.8.1 数据局部性 53
4 j% D8 u" w+ a7 D/ y: Q" R C- E/ ^3 }) ?3 `: s$ k: Y
5.8.2 跳增指针分配 53
% |" H) t w4 V6 D6 |
! e4 f4 ]3 Z1 U, Q9 | Q. P- `5.8.3 空闲列表与分配位图 53
8 N% U( h, I: K3 S9 t& x
7 J0 ~3 P- L. W# l; C5.8.4 离散大小列表 54' K& M7 j5 h5 C9 b# X% d
8 {# {: X5 B$ u5.8.5 标记位与分配位 54
: ?+ D2 T) p( O3 `% d! N2 f5 S/ B1 h4 r" k
5.8.6 线程局部分配 55
7 K* J$ u2 J/ X$ @4 d8 U% k2 C: Q. }: ^. m! d: }
5.8.7 移动式GC与非移动式GC的混合 56: z- w) r( ~7 e6 ]) H
9 A. p& k5 P- {- b1 K0 V0 O
第6章 线程设计 58
6 x. `8 N2 j/ r: h+ t! H; ?3 h2 D% R* s$ z$ b
6.1 什么是线程 58
0 f3 ^& e6 `5 c' A+ S
. T; H6 @* e7 u8 R1 b6.2 内核线程与用户线程 59- ^5 [% `! | V/ |8 q
$ ?' a" M+ m3 O1 p% K* w6.3 VM线程到OS线程的映射 61* H4 X7 i" h' \0 r
2 V% P, T+ u6 Z, w
6.4 同步构件 63
! \1 d+ h; B8 y% W0 ]( M: ~( e& S$ g" u/ u& }3 `
6.5 monitor 659 R" _3 F9 Y; T' i
6 D: Q3 |1 w' _ a6.5.1 互斥 65
! x" r( Y/ S i0 d
" y5 W* d& u# l+ ?- i2 {) p6 f6.5.2 条件变量 66
; u1 L. d$ A7 q2 K- U# l
+ l( t7 F' S& l5 h( ?# E7 r- [6.5.3 monitorenter 66! p- j2 O6 ]/ Z/ r$ P h: `
; K; ^9 v" V; ?2 l4 H5 Q
6.5.4 monitorexit 69
7 c7 A& K5 f) R, S3 X. b7 R6 W4 G; P& h
6.5.5 Object.wait() 71
; x/ d: A/ o" W8 W# |# E8 y2 k8 H' ^* a
6.5.6 Object.notify() 712 G4 m+ {5 \0 N/ P; s; ~& |- {
% q" v0 K) T8 i7 Q6 x/ {5 E
6.6 原子 73) u" A O5 f) V; V2 n5 ]
% W' r: V/ U5 ~
6.7 monitor与原子 75: H9 J4 E& H- J
. o7 ]3 _1 ?, |5 S% e5 _
6.7.1 阻塞与非阻塞 75
; L$ `6 P, o: B# _, V2 W# U0 Z0 R6 \9 ^& c, I! o3 }+ w, H3 `/ r
6.7.2 中央控制点 75
0 W- X* P% f; ~+ ~9 M( y* s) d) ]/ @7 }" Y" O/ R9 k
6.7.3 锁与非锁 75& ~3 G0 l, X* l# M
3 B) | ?% t: e
6.7.4 非阻塞之上的阻塞 763 a( ]1 ]9 H# e5 N% `
$ O" q$ a8 s1 p6.8 回收器与修改器 770 I; b N& z, I; e+ K
" @0 F- F4 Q/ D2 n$ G
6.9 线程局部数据 78* w5 l8 Q3 f* c* b& T+ B2 N
@3 }+ ?4 @$ U% K$ m6.10 GC的线程暂停支持 81' N9 x# ?( u7 D, P; z
0 f% f" K/ C! ?! s. @6.10.1 GC安全点 811 L6 }# B* Z* i! x- n% I8 d
: Y& T1 Q9 [; {3 m7 w6.10.2 GC安全区域 837 h8 m# d: d' k$ Z- g
% b- O$ M/ c5 c* b. k h1 t
6.10.3 基于锁的安全点 86
7 M) X* P4 P& m4 m% _" \+ }2 h3 V8 H6 Q
6 G( v. d6 n! r3 d, M# ^) a6.10.4 回收中的线程交互 87
( n: `! d# `( Y; L, f# ?1 i
2 P8 R6 m& T* Z# V* {, z第三部分 虚拟机内部支持- N+ X [2 t9 X/ M. s6 M5 z
' O, c6 l0 u' Z- u0 x* ?
第7章 本地接口 921 @. ^6 I* h$ L1 f( J7 W/ I% s1 ?
8 H) `9 n* q w R/ W7.1 为何需要本地接口 92
% l. X, `- A$ l6 m8 G [
2 F& v, j% `& ?% |5 m. D9 Z7.2 从托管代码到本地代码的转换 93
( w) y' m5 B; y2 ]3 o" U% z8 z' H- b( M' l0 H& _
7.2.1 本地方法封装 94
" `. G5 A; S3 S/ ^, Y) Y$ D
+ r* z' a9 U4 J1 q7.2.2 封装代码的GC支持 96! g, p! M# o3 w. \; E$ Z$ B; C
7 O0 w$ n5 A$ Y
7.2.3 封装代码的同步支持 98! v( B' m( R# ]5 ^$ E* B
5 i3 e* S+ T$ E2 ]0 }7.3 本地方法实现的绑定 99
5 W" n: b" `+ x9 \; C2 W; {0 X7 k- E9 _2 J* W) a
7.4 本地代码到托管代码的转换 99. ] p/ B% q- q, i: j6 z
# a" W2 m5 L4 |% `2 Z F4 J8 M% ~
7.5 本地代码到本地代码的转换 102
8 T3 @* B2 d9 D( ]3 s4 u) [
1 V1 ^5 \2 r `4 k4 q7.5.1 通过JNI API的本地到本地转换 102& H& i [) S! T& y
; a( K7 k- `2 n2 M& L
7.5.2 为什么在本地到本地转换中使用JNI API 1054 f; u2 |3 K+ Y- N N* Q# P
! a0 V4 j) c& c0 w* b9 k/ X" N第8章 栈展开 1074 Q, ?! G* C" [+ l- L* d
; P5 r1 t' J, u( ]' j8.1 为何需要栈展开 107" S2 ]6 j- D3 f; m$ ^7 n3 F2 i/ _
; M7 p; ~8 y7 w8.2 Java方法帧的栈展开 108
5 p. d1 N7 R5 s& [) J: Y+ o$ {1 e
( s% L& k4 X$ O8.2.1 栈展开设计 108
a# i& Y0 J* m9 g* N5 p8 J( q5 A r7 R8 S9 @) d4 {
8.2.2 栈展开实现 110
8 [, Z0 H3 g9 m& j7 M
# G1 i& C- ^7 l Y: U6 g- U8.3 本地方法帧的栈展开 112 A' x. ~6 f7 o: u% b6 v7 o
1 d0 ?' l V/ A0 }1 m4 w+ \8.3.1 栈展开设计 112 @4 [5 r& v: d9 D; `
, J8 G; G. k4 N/ U) | [
8.3.2 Java到本地封装设计 114
' l1 G5 u8 U3 ^# }" n* p1 x' K
$ f0 a1 I5 t8 Z3 V3 Y8.3.3 栈展开实现 116
' }9 t& P) v; n r: W& P) E0 _+ [; z; {! W ]. C
8.3.4 本地帧与C帧 117
: C; }/ A p- O# J* J; j, f l! `$ m6 H* B! g) }! z0 J
第9章 垃圾回收支持 119
" T$ e& J1 G& ]0 K. n% w$ c9 S: z- n
9.1 为何需要垃圾回收支持 119
) a6 Q( G9 _0 G k4 N( h) [/ Z7 Q3 L
2 g) ` L( }4 y# h9.2 在Java代码中支持垃圾回收 121
3 d5 w S& c: ^. s1 U% H/ f+ o: {* [# G& v# R" N/ {3 o
9.2.1 GC-map 121
. t; x/ `1 k- R3 s
3 n6 [: F% Q/ V; ?* f9.2.2 带寄存器的栈展开 1242 K( y0 q7 H/ V* Q0 X5 g
$ H( g \0 E+ S7 j; G; E* H' Q0 L2 g9.3 在本地代码中支持垃圾回收 1264 w* g" j" b: T2 |2 W/ C+ O/ v
; a* h/ {( e; @( Z0 o1 B2 w! i4 K% }
9.3.1 对象引用访问 127
6 E a4 }* m& b" f- _3 r0 t- H2 R8 d0 d. T- L" t) H. E* n8 k* n
9.3.2 对象句柄实现 129
1 K& ?9 j7 s& q6 P; D
$ t8 h8 z/ i/ r# l9.3.3 GC安全性维护 132/ t# g2 V A N/ Z4 V- b4 J
5 w& r2 c+ d! D1 |
9.3.4 对象体访问 133* _7 m* ^* k5 f( s
/ t0 V+ _) {; n6 T/ n8 B6 H) t
9.3.5 对象分配 135( B5 W8 ~! ?2 b4 B* K* T3 ^8 u% \5 P
8 H7 i; G1 R' o' [7 I" B9.4 在同步方法中支持垃圾回收 136) O; s: S/ _- l( B8 @
& E; B9 f8 ` f7 z4 v$ h0 B+ P9.4.1 同步Java方法 136
E4 M8 Q9 Q; ~! n# J0 [- }8 T; h9 s# R& P0 \) r1 S# }
9.4.2 同步本地方法 1388 ]2 U4 D G( S8 s5 J( t
; L; u! a- O! O* p6 m9.5 Java与本地代码转换中的GC支持 1406 s2 ?* r1 ^9 ~3 ^% M
5 ]) o+ o1 t% f$ E
9.5.1 本地到Java 140# e8 Y% l8 w2 m1 {. R# Y9 v
) \8 L+ V8 S, K. I7 a
9.5.2 Java到本地 142
+ {- } V5 B5 _, X) x! F' p& a3 ~
- ?9 D. g6 z# F9.5.3 本地到本地 142 U/ X p, C5 {) y
X- ^+ S) @0 Z1 L1 P9.6 全局根集 144& X9 p6 D4 f! T
0 I. o8 ?% y( a% r& Q3 P第 10章 运行时辅助 145& [& c5 B3 t/ D/ F; X: s
& R; j% B) d7 \0 J- _10.1 为何需要运行时辅助 145! H6 S( ^0 E' G4 F, p
/ h. P2 D8 W0 _8 Z, Z8 L10.2 带运行时辅助的VM服务设计 147
9 p2 V( }2 g- V+ ]) F3 Q
! v8 p4 P# p, P: ?" F" b) {10.2.1 运行时辅助操作 1479 P/ H- m- Y, o: A
8 a, o1 H7 _( G# D1 j: u; ]10.2.2 运行时辅助实现 1482 p* b5 a* z4 c+ R! e
4 K: |2 z# g+ x* v. W o
10.2.3 JNI API作为运行时辅助 150; s) z r+ A7 t* G# |
( i' B3 ~+ H3 a& J( y$ h% j
10.3 没有运行时辅助的VM服务设计 151
% _( p+ |* D- C0 U6 s! p. D* a' z2 \( e: M* E
10.3.1 运行时辅助的快速路径 153
. P. I1 m# j& f9 }1 C. S2 ?( @+ U1 G7 I& @$ Z/ C
10.3.2 快速路径VM服务编程 154
3 b! }9 W0 E, t; G, l4 j' D8 F) t& P8 m2 H" Y
10.4 主要VM服务 154
1 { A8 `# g U W* b: p/ W' T
1 G0 w! B) q4 u' {. F) T, F第 11章 异常抛出 157
, S9 {. F+ E& H2 s& t: M; }- M( E8 ~! y
11.1 保存异常抛出上下文 1577 V; H1 d5 T; u) f) M% f) z% t
/ }1 z: r" \; p# G' ]11.1.1 VM保存的上下文 158
9 r9 v3 a7 C L' ]/ v9 ~+ ^. ~2 t* |% e E5 c/ r1 x8 i: y- x
11.1.2 Linux中OS保存的上下文 1582 h# o0 U2 P# R4 h% P2 H; ~
! x/ S0 p' u3 V# f# w7 |
11.1.3 Windows中OS保存的上下文 159
; d I1 o9 D) J4 [
4 o/ d: Y4 x4 I8 B( x" L11.1.4 同步与异步异常 1603 Z) R' }5 K& u' X
& X) u g7 x) h' V/ F$ q% F! i. z
11.2 本地代码内与跨本地代码异常处理 161& g8 b9 Y8 ?' `5 Q$ c5 ]
4 P$ E6 w0 P. R
11.2.1 本地代码内的异常处理 1618 ]3 Z# f" P& o! S& ]. Q3 i
" s7 ^- f8 U. L7 I/ o& g4 f11.2.2 带异常Java代码返回到本地代码 162
1 h- v& `! x3 W; H& l% p; x9 S2 |6 N9 s, { B
11.2.3 带异常的本地代码返回到Java代码 166$ Y9 ^( g0 e) k7 u: S" X
% f: P9 c. T4 b% C11.3 保存栈轨迹 167
7 n1 { ~1 c ?; \2 @% _; i$ L- v% q6 o% R3 z5 t1 \6 v# |
11.4 找到异常处理器 169" ~8 ?7 F7 f$ X1 c& }" @9 @
# A2 {' O7 G7 b5 y# E
11.5 控制转移 172
8 r) j8 R0 {4 T4 Q D- c. {. i- o4 \
11.5.1 控制转移操作 172
2 ^, _& K z, @* Y' g8 ]# ~7 @% D6 }) }0 w4 x( D
11.5.2 用于控制转移的寄存器 173* g/ I' `' v4 A2 Q
: O3 S; P1 z8 w11.5.3 数据寄存器恢复 1744 N7 ~2 j* a* A' ?+ {
2 L) ^1 x) o3 b% ?3 i
11.5.4 控制寄存器修正 176
" v% ~% ?' I5 d# n
' R5 y, T4 M6 }. g6 r$ w$ x11.5.5 执行恢复 176
( a, R+ T: t3 D6 T/ R; E3 o
$ d! A' v$ c3 G/ a3 W9 z11.5.6 未捕获异常 179
# k' x; G& A" w& `
& ?8 |1 X$ k3 h4 O* f" t第 12章 终结与弱引用 180
2 F6 W. i9 R8 `3 M/ Z1 v* _6 T7 l! `! v
12.1 终结 180& i0 V8 M/ F* W& x0 h' i7 W
& v' C0 \4 m$ S7 e
12.2 为何需要弱引用 182
. X6 i& ?2 c: z8 X1 Y) T6 ^8 B2 T- g
12.3 对象生存期状态 184
! m7 b: C8 D5 ~0 D4 q
& d, d- ^! ?% p: `; L5 |12.3.1 对象状态转换 185
& R2 b0 i* J) Z/ h
% [, ^, x5 ]' Y" \* L4 W12.3.2 引用队列 187
) I0 v4 z; @2 T- w, r; p: ^5 \5 p) @% b- C( I
12.3.3 引用对象状态转换 187
8 ?- {" D. V: H& [5 T1 J( U# Z* x% Z
12.4 引用对象实现 1898 N$ [* |% C ^7 M! \
3 {" ~ V6 V- Y- Y& y
12.5 引用对象处理顺序 191; W" i: J5 N Q7 M+ h
% p1 f; ~1 w2 V* U4 y
第 13章 虚拟机模块化设计 194
" u1 e; X- ]1 r6 @# ^5 @- K. V4 q5 a( P; E8 _* o+ V
13.1 VM组件 194/ s: o Q* d6 A7 C
3 \; V$ P0 b3 I& D) x9 |+ Y13.2 对象信息暴露 197$ w! Z9 i& H1 B3 O- ~/ B+ H
* l n' }- M6 Z9 D13.3 垃圾回收器接口 199
4 f9 v8 T6 f: B
1 \0 W+ ^% b# q3 W+ A. A5 m" O13.4 执行引擎接口 202, f# w, Q/ _/ ~2 k( H
. _2 \/ S; w' ]+ R- w6 H' k6 f
13.5 跨组件优化 203
7 h1 d! x+ h v% W! z7 [# o
7 g! M1 t2 \8 y* _第四部分 垃圾回收优化9 Q- K5 ^5 d8 G. l( u) }+ ]/ U
/ Y E+ Q% L! T2 G$ i; o# M+ O第 14章 针对吞吐量的GC优化 208+ r- Y0 N, `9 w$ B3 f
0 w" \% Y1 }1 ?9 C( T- J/ K$ _
14.1 部分堆回收与全堆回收之间的适应性调整 208% p3 `1 [/ I; }1 o
1 ]5 i& A7 x0 H2 z7 U" |
14.2 分代式与非分代式算法之间的适应性调整 213
) v, H& Z2 \, T! w0 a9 t4 k# d& t
, a4 f( p) Z; v& J9 e( {7 {14.3 堆的空间大小的适应性调整 217
* p7 f8 Q5 z; G8 N" `8 k2 Z' f* n. W) }" S
14.3.1 空间大小扩展 218. L- b2 J$ ? _1 H4 [
1 v4 `( w: V3 E/ Z7 I14.3.2 NOS大小 2195 S) k/ M: r9 Y E
# B. Z8 [& C/ K1 k/ M- s$ c! M14.3.3 部分转发NOS设计 2217 A% Z# V0 H# v9 l0 \
( @2 J7 P3 o1 t& e6 R14.3.4 半空间NOS设计 221
8 q% z. o# O x K. z, H4 G
6 w+ W ~3 c. O, [; d& V4 g( t* L14.3.5 aged-mature NOS设计 223* G* d6 ^' Z! n( p
% q6 u: o# j7 g8 i# d2 ^14.3.6 回退回收 225
: d5 C3 C2 U, w# d0 B6 P0 r* p: @. R
# x) z' i) g2 e6 N1 h! w+ n( V1 t) `14.4 分配空间之间的适应性调整 225/ C3 X9 ^) b, [8 u
$ j5 Y7 m4 N& D8 _& L% i
14.5 大OS页与预取 230
( k9 C8 @2 L2 E# |* s0 y2 @: n6 K) r/ M. k6 x2 O. Z/ A
第 15章 针对可扩展性的GC优化 232
1 J* L2 K/ j# m2 I( R7 m
f. j Z s3 z- Y7 Q15.1 回收阶段 232
5 d; Q3 f1 C0 t- N3 D7 J
! w& L( {6 ^6 D9 X4 d15.2 并行对象图遍历 233- o! B: I0 N2 Y6 G
8 N2 q, T7 [5 g15.2.1 任务共享 234# T8 q4 H* d8 O6 P( U
! m$ o7 C: ~+ B/ S8 {1 J
15.2.2 工作偷取 2341 U4 |1 z6 P, a9 e1 C
% c& B( g5 u2 G15.2.3 任务推送 235
* l W$ d4 T% a( _/ l7 n2 y0 b3 T& u' G, q- Z# l
15.3 并行对象标记 238
( c# G' I" X7 q' G9 E; ]4 N/ Q( x! Q0 P; |9 \/ B2 G
15.4 并行压缩 239
! X! d+ a5 g8 B; N C0 ~2 F) v0 w2 e$ n1 z, i5 ]. w( H/ T8 E
15.4.1 并行LISP2压缩器 239
/ c1 J% x8 Y' ^/ u/ N: ]2 a O- k' Z9 O5 m' Y( g. J W4 V
15.4.2 对象依赖树 241
0 C, G: T/ F0 m
J0 k% a( i/ _15.4.3 带用于转发指针的目标表的压缩器 244: f' Y7 f5 ~4 V( x C
6 a5 W3 K0 |3 e; m: F15.4.4 基于对象节的压缩器 246
& B) [+ S" X3 r3 t0 i B1 s
% y& i: d" a# U1 z; R1 r* Q15.4.5 单趟就地压缩器 247
7 k: [$ \+ M# z( M$ w
! @4 h" m: f& ?: g第 16章 针对响应性的GC优化 249
9 K) m% B) R8 Q/ `: i# {. o. p; y) i) W2 R# v6 P9 g D( z
16.1 区域式GC 249
9 `1 N- m+ l% i; [
9 }" ]9 [- d; b& ^16.2 并发追踪 252
" h; `# D5 e6 J' _
$ ^9 V) l2 ]2 U: T* i16.2.1 起始快照 252
: W% C, X9 q' T/ Z% |, n& M9 }- C# g6 P( J9 }0 J, b, R, a$ x. x1 p$ ^
16.2.2 增量更新 256
0 ^4 e* m* q9 A: I, Z" N. t) C1 q _+ f# w0 r7 s( b
16.2.3 用三色术语表示并发追踪 259
' `1 ^) t" a2 G( U) G- {
! } s$ i T( |: B16.2.4 使用读屏障的并发追踪 2608 [0 d- b* }) M0 r* ~
3 @7 F! ]0 X! H% T |7 Z. y6 ?
16.3 并发根集枚举 261
0 G; o( l5 U& C. N* X. C
) g2 \- P0 |0 r4 u0 O6 u. L16.3.1 并发根集枚举设计 262: v" h. U' z. D7 l1 [
" J t) m- d& S3 ^7 ]8 }
16.3.2 在根集枚举过程中追踪堆 265+ ^8 C4 @% o" V4 Z2 W. C
- M3 ]: t0 ?' d16.3.3 并发栈扫描 266
_! u" i& |6 s; Y: b8 P, v4 k6 i" R6 g& m0 N
16.4 并发回收调度 2670 C! M# Z# Z5 V9 {, n
r& _, m* ]$ B. }: {. \( P16.4.1 调度并发根集枚举 267! i; Y5 ^% D6 A# Q( j' c
& u7 z, x. r/ ?) X/ {! ~8 F16.4.2 调度并发堆追踪 269: O) D0 z5 H y! {5 x9 l
' ~2 T. y# W; C- ^+ O
16.4.3 并发回收调度 271' @# S0 b J1 k
0 _! w: |) C9 p! ~) |* G# b16.4.4 并发回收阶段转换 272! t! a/ r& {. I: [
0 n. x/ H6 D" r- |
第 17章 并发移动式回收 277
4 h2 j. z1 x6 p* ^& C
' @0 Z1 a O* o: ^& s0 [( J6 W4 P! G+ f17.1 并发复制:“目标空间不变” 277
. O9 [7 \ ^/ h) d. v: A# h* A& S. k- F- r/ h" \8 W
17.1.1 基于槽位的“目标空间不变”算法 277
2 C* m1 g: t# B5 R0 B
; L7 }( R8 }! G) J' u( F1 U17.1.2 “目标空间不变”性 2807 p8 S, |! Y* V% ?+ P: O" @
' p& F0 t8 P: Z' Z% X9 U8 N% F6 b17.1.3 对象转发 282
9 D' {+ Q; t- C' T. o
& _5 D1 n* @+ i% Z& p& e& ^7 M) h17.1.4 基于对象的“目标空间不变”算法 283$ r$ T8 Y% z2 c2 b
3 m B% a! w+ t2 v' [17.1.5 基于虚拟内存的“目标空间不变”算法 285$ @8 \6 N. Z! R% P6 I' ?
7 o: t$ C @ V* Z G: [17.2 并发复制:“当前副本不变” 286$ v% A! n& h) o# ^0 D O
. Z/ c. ?0 V4 |3 b7 s: B
17.2.1 对象移动风暴 286
) R. y2 q I+ ]" C; ]" B6 e1 b; l; p/ w W
17.2.2 “当前副本不变”设计 287
& z( R/ P. T8 {$ \2 r$ g- ?. \" ~8 a/ N( W6 X. B) d+ b# z7 B
17.2.3 并发复制与并发堆追踪的关系 289+ M4 U- U( b+ Y0 t( X
) W. S) z7 I3 M0 H& U6 o; h( ~' ]17.3 并发复制:“源空间不变” 292
7 d) H' P- H- n) e# M! X' l
6 g3 K1 V) K. S% r17.3.1 “源空间不变”设计 292
2 ~& \( d3 W# D) k% K' r+ H% U* p! X, ?, a
17.3.2 部分转发“源空间不变”设计 294
$ v6 R2 m5 ?+ r" j' d
' U) v. m/ ~/ |% h17.4 无STW的完整并发移动 295
9 w6 X' C. V4 }3 d0 c1 S. n/ u& O1 {, x! D
17.5 并发压缩回收 296: M5 h. w" Q% {- _
: ~3 T- {2 F( o3 Z8 x17.5.1 并发区域复制式回收 2966 Q, m# m+ M. t- S* i, o' B
! m% Y6 A$ i3 u; b# `4 ~2 a17.5.2 基于虚拟内存的并发压缩 299
+ X: I) o1 R+ |' F& T
9 r) A W, I {$ ~第五部分 线程交互优化$ d. c# x, Y; e$ o4 M! U
O5 L2 h0 c( Z0 `" _第 18章 monitor性能优化 308+ Y! X. Z* K8 ~: u1 j
; n; B1 e# [9 G
18.1 惰性锁 308
4 z' u9 y6 A2 d9 ?$ U* ?/ c0 R. n. Q$ Y- U- E
18.2 瘦锁 310
% z D0 E* Q+ R
" a _, E P3 l n& h: z) W8 i2 O18.2.1 瘦锁锁定路径 310* I# x% R) u# z0 T" w0 ^6 K
, r; T" G3 M. G1 [18.2.2 瘦锁解锁路径 3137 _, M) [5 S- G! Y2 X+ T P
0 ^" e" _# A: {0 h( @, r18.2.3 竞争标志重置支持 316
% K$ n' x6 e% q, I
, z% X9 y! Y6 s18.3 胖锁 318* v+ o1 u7 f# u( j }7 n! f1 |
' {8 \$ b5 A. T" z3 [( \) C' q
18.3.1 整合monitor数据结构 318" T7 K T$ P$ g2 |1 ~$ B6 d9 k
: p3 @4 t$ P' Q1 W/ F6 {1 h18.3.2 交由OS来支持 319
+ ~) O9 X! B M( B1 t
0 b* c3 A( N9 W; j% w1 _0 O4 h18.3.3 瘦锁膨胀为胖锁 3218 c) R, f0 U3 S' N4 E/ a
9 V3 e& i, K: |: E+ n# S( h) n. w18.3.4 休眠等待被竞争瘦锁 324
8 ]" J6 ~! j$ {0 F" F* ~% B% v
" e* e0 e) w4 A$ ^) V18.4 Tasuki锁 327+ h4 }* l- Q4 y; s; [
Y m: S; |7 {9 G18.4.1 将同一个胖锁monitor用于竞争控制 3278 k( D- T) k+ Z
7 d# R3 Q) l' i" j
18.4.2 胖锁收缩为瘦锁 331
" C( Z' ?( n- u' R* \8 ?: [1 M$ M
7 X% I4 h- E1 ~18.5 线程局部锁 334' E/ S g% h4 _4 r
! q$ q$ e) z6 ]18.5.1 锁保留 3353 P6 o; b- c. \; j! y' A) Z' _
: k6 D+ e9 x1 }) E
18.5.2 线程亲密锁 339+ r2 x9 I: R2 w0 t5 ~' L" \
9 b( a/ c" B8 B$ ?" C+ h% i9 w
第 19章 基于硬件事务内存的设计 346
5 N# k( Q% Q, g5 ?" J5 ^ Z. u* {$ @* b5 V9 j
19.1 硬件事务内存 346$ x$ Y% ]$ f+ ?
2 ` n( `" m. D5 a& q% `
19.1.1 从事务数据库到事务内存 346
" }& q( w1 }2 D1 r, j' Z) T. r
; A3 _9 s' D' B19.1.2 Intel的HTM实现 347
- }* L) s. e6 c$ [5 [: x; Kjava8.com$ ^8 X7 W3 H! _
19.2 使用HTM的monitor实现 348
1 p+ P& } x# s7 U, W0 A0 A" v# m
19.2.1 基于HTM的monitor的正确性问题 349* ]5 e# K. X; d. s7 G: K% ?; P0 S
3 i0 ^" d5 u5 X19.2.2 基于HTM的monitor的性能问题 3528 p! h% R; Y6 n4 @! R. ~0 ?
0 ?5 R1 b9 u& a; w& \19.3 使用HTM的并发垃圾回收 355
+ b4 g; B- X$ N" f* w; L# q* Z$ L2 ]* D3 x. ~ l7 g6 \ J( j
19.3.1 GC中HTM的机会 355& W) ~2 i7 j5 r) C
1 h9 [: z; A; T
19.3.2 复制式回收 357, F5 S, ~9 c0 v3 H- g& ^
4 B2 A. C/ O, x _
19.3.3 压缩式回收 360
9 M' m+ B/ i3 \5 N
) g( Z9 b4 X8 y7 m参考文献 3645 O9 G3 F1 m& I
; D/ i: H6 ~1 | W$ \* P
6 p4 d; G7 L6 h5 Y8 |' v, k
百度云盘下载地址(完全免费-绝无套路):% s% ^8 ~# q: @) s# a5 k
3 T5 L1 P0 ^% A2 p- i/ X' Y3 [/ B
本资源由Java吧收集整理【www.java8.com】
" Z+ t7 I) @6 i6 z4 ], p; J7 c. L0 m; f, @4 R7 K3 a' w5 C- Q
- z5 Y# h* G! V
, L) b3 R0 u) i7 \% C x0 S
& _* K/ T- A9 a$ H5 O) F
7 P9 X. v( j( p0 s2 i# Y% R/ w% K1 {4 r
|