Skip to content

Commit 603b225

Browse files
committed
修改:部分文章的语义&部分文章的错误图片路径
1 parent 8d8d668 commit 603b225

File tree

8 files changed

+26
-20
lines changed

8 files changed

+26
-20
lines changed

gitbook_doc/jdk-jvm-juc/GC.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ GC的对象相比新生代更少。
112112

113113
**标记-整理算法和标记-清除算法一样,一般用于老年代。**
114114

115-
![标记-整理算法](../../img/jdk-jvm-juc/标记-整理算法.png)
115+
![标记-整理算法](../../jdk-jvm-juc/标记-整理算法.png)
116116

117117
#### 分代收集算法
118118
**分代收集算法并不是指某一种具体的垃圾收集算法,
@@ -157,7 +157,7 @@ JVM发起Minor GC。Minor GC的范围包括eden和From Survivor:
157157

158158
#### 动态年龄阈值
159159
JVM并不要求对象年龄一定要达到 MaxTenuringThreshold 才会
160-
晋升到老年代,晋升的年龄阈值是动态计算的。
160+
晋升到老年代,晋升的年龄阈值是动态计算的。
161161
如果在Survivor中,某个相同年龄阶段的所有对象大小的总和
162162
大于Survivor区域的一半,则大于等于这个年龄的所有对象
163163
可以直接进入老年代,无需等到MaxTenuringThreshold。

gitbook_doc/jdk-jvm-juc/IO.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
unix与linux的体系架构:分为用户态与内核态。
3434
用户态与内核态与内核态是操作系统对执行权限进行分级后的不同的运行模式。
3535

36-
![用户态与内核态](../img/jdk-jvm-juc/用户态与内核态.png)
36+
![用户态与内核态](../../img/jdk-jvm-juc/用户态与内核态.png)
3737

3838

3939
#### 为什么要有用户态与内核态?
@@ -100,7 +100,7 @@ Linux下共有5种IO模型:
100100
那么用户应用进程(线程)就阻塞,直到内核准备好数据并把数据从
101101
内核复制到用户应用进程,** 最后应用程序再处理数据。
102102

103-
![BIO原理](../img/jdk-jvm-juc/BIO原理.png)
103+
![BIO原理](../../img/jdk-jvm-juc/BIO原理.png)
104104

105105
**阻塞IO是同步阻塞的。**
106106

@@ -127,7 +127,7 @@ Linux下共有5种IO模型:
127127
这个过程就叫轮询。** 轮询直到内核准备好数据,然后内核把数据拷贝到用户应用进程,
128128
再进行数据处理。
129129

130-
![NIO原理](../img/jdk-jvm-juc/NIO原理.png)
130+
![NIO原理](../../img/jdk-jvm-juc/NIO原理.png)
131131

132132
非阻塞IO的非阻塞体现在: **用户应用进程不用阻塞在对内核的系统调用上**
133133

@@ -146,7 +146,7 @@ Linux下共有5种IO模型:
146146
当select/poll/epoll函数返回后,即某个socket有事件发生了,用户应用进程就会
147147
发起系统调用,处理事件,将socket数据复制到用户进程内,然后进行数据处理。
148148

149-
![IO多路复用原理](../img/jdk-jvm-juc/IO多路复用原理.png)
149+
![IO多路复用原理](../../img/jdk-jvm-juc/IO多路复用原理.png)
150150

151151
**IO多路复用模型是同步阻塞的**
152152

@@ -177,7 +177,7 @@ select/poll/epoll函数是IO多路复用模型的基础,所以如果想
177177
发送SIGIO信号,应用进程收到信号后,发起系统调用,
178178
将数据从内核拷贝到用户进程,** 然后进行数据处理。
179179

180-
![信号驱动IO原理](../img/jdk-jvm-juc/信号驱动IO原理.png)
180+
![信号驱动IO原理](../../img/jdk-jvm-juc/信号驱动IO原理.png)
181181

182182
个人感觉在内核收到系统调用就立刻返回这一点很像异步IO的方式了,不过
183183
与异步IO仍有很大差别。
@@ -188,7 +188,7 @@ select/poll/epoll函数是IO多路复用模型的基础,所以如果想
188188
都会立即返回。用户应用进程不会阻塞,可以继续执行其他任务。当内核准备好数据,
189189
会直接把数据复制到用户应用进程。最后内核会通知用户应用进程IO完成。**
190190

191-
![异步IO原理](../img/jdk-jvm-juc/异步IO原理.png)
191+
![异步IO原理](../../img/jdk-jvm-juc/异步IO原理.png)
192192

193193
**异步IO的异步体现在:内核不用等待数据准备好就立刻返回,
194194
所以内核肯定需要在IO完成后通知用户应用进程。**

gitbook_doc/jdk-jvm-juc/Java集合.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,4 +196,4 @@ ConcurrentSkipListMap是基于跳表这种数据结构实现的。
196196
每层链表的元素也都是有序的。处于上层索引的链表都是下层链表的子集。
197197
跳表与普通链表相比查找元素的效率更高。
198198

199-
![跳表](../img/jdk-jvm-juc/跳表.png)
199+
![跳表](../../img/jdk-jvm-juc/跳表.png)

gitbook_doc/jdk-jvm-juc/对象在内存中的布局.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,22 @@
2828

2929
#### 实例数据
3030
实例数据存储着对象在程序中被定义的各个字段的数据,也就是对象的字段的
31-
数据。**如果一个类没有字段,也就不存在实例数据,所以这是它不固定的原因。**
32-
31+
数据。**如果一个类没有实例字段,也就不存在实例数据,所以这是它不固定的原因。**
32+
33+
3334
#### 对齐填充
3435
**Java对象的小必须是8字节的倍数**,像13,15这种非8的倍数的对象的大小,
3536
不足或多余的部分就要使用对齐填充数据补齐。
3637
**如果Java对象大小正好是8的倍数,那么就无需对齐填充数据。**
37-
38+
39+
3840
### 对象头
3941
关于对象头,在hotspot中,opendjdk是这样描述的:
4042

4143
![对象头描述](../../img/jdk-jvm-juc/对象头的描述.png)
4244

4345
大意是说: **对象头是jvm在每次GC时管理的对象的通用结构,包含了对象的布局,类型(Class Type),GC状态,
44-
同步状态和hashcode等信息,在数组中,还会跟随数组的长度。java对象和vm对象都具有通用的对象头格式。**
46+
同步状态和hashcode等信息,在数组中,还会跟随数组的长度。**
4547

4648
在hotspot虚拟机中的对象头由2部分组成:
4749
mark 和 metadata(包括klass* , compressed_klass)(**如果是数组,对象头还会保存数组长度**)(见oop.hpp文件)

jdk-jvm-juc/GC.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ JVM发起Minor GC。Minor GC的范围包括eden和From Survivor:
157157

158158
#### 动态年龄阈值
159159
JVM并不要求对象年龄一定要达到 MaxTenuringThreshold 才会
160-
晋升到老年代,晋升的年龄阈值是动态计算的。
160+
晋升到老年代,晋升的年龄阈值是动态计算的。
161161
如果在Survivor中,某个相同年龄阶段的所有对象大小的总和
162162
大于Survivor区域的一半,则大于等于这个年龄的所有对象
163163
可以直接进入老年代,无需等到MaxTenuringThreshold。

jdk-jvm-juc/src/main/java/com/github/guang19/jvm/classloader/LoadClass.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ public static void main(String[] args) throws Throwable
2525
{
2626
//静态变量字段才会初始化类: getstatic
2727
// System.out.println($Class.b);
28+
//静态常量不会初始化类
29+
// System.out.println($Class.c);
2830

2931
//给静态变量赋值 : putstatic
3032
// System.out.println($Class.b = 1);
@@ -54,7 +56,7 @@ public static void main(String[] args) throws Throwable
5456
// methodHandle1.invoke();
5557

5658
//VarHandle作为动态获取变量的调用
57-
VarHandle a1 = MethodHandles.lookup().findStaticVarHandle($Class.class, "a1", int.class);
59+
// VarHandle a1 = MethodHandles.lookup().findStaticVarHandle($Class.class, "a1", int.class);
5860
// Object o = a1.get();
5961
//此处被编译成 : getstatic
6062
// System.out.println(o);

jdk-jvm-juc/对象在内存中的布局.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,22 @@
2828

2929
#### 实例数据
3030
实例数据存储着对象在程序中被定义的各个字段的数据,也就是对象的字段的
31-
数据。**如果一个类没有字段,也就不存在实例数据,所以这是它不固定的原因。**
32-
31+
数据。**如果一个类没有实例字段,也就不存在实例数据,所以这是它不固定的原因。**
32+
33+
3334
#### 对齐填充
3435
**Java对象的小必须是8字节的倍数**,像13,15这种非8的倍数的对象的大小,
3536
不足或多余的部分就要使用对齐填充数据补齐。
3637
**如果Java对象大小正好是8的倍数,那么就无需对齐填充数据。**
37-
38+
39+
3840
### 对象头
3941
关于对象头,在hotspot中,opendjdk是这样描述的:
4042

4143
![对象头描述](../img/jdk-jvm-juc/对象头的描述.png)
4244

4345
大意是说: **对象头是jvm在每次GC时管理的对象的通用结构,包含了对象的布局,类型(Class Type),GC状态,
44-
同步状态和hashcode等信息,在数组中,还会跟随数组的长度。java对象和vm对象都具有通用的对象头格式。**
46+
同步状态和hashcode等信息,在数组中,还会跟随数组的长度。**
4547

4648
在hotspot虚拟机中的对象头由2部分组成:
4749
mark 和 metadata(包括klass* , compressed_klass)(**如果是数组,对象头还会保存数组长度**)(见oop.hpp文件)

jdk-jvm-juc/类的生命周期.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ JVM会对字节流进行如下验证:
7979
8080
在这个阶段,**只有主动使用类才会初始化类,总共有8种情况会涉及到主动使用类。**
8181

82-
1. 当jvm执行new指令时会初始化类没,即当程序创建一个类的实例对象。
82+
1. 当jvm执行new指令时会初始化类,即当程序创建一个类的实例对象。
8383
2. 当jvm执行getstatic指令时会初始化类,即程序访问类的静态变量(不是静态常量,常量归属于运行时常量池)。
8484
3. 当jvm执行putstatic指令时会初始化类,即程序给类的静态变量赋值。
8585
4. 当jvm执行invokestatic指令时会初始化类,即程序调用类的静态方法。

0 commit comments

Comments
 (0)