diff --git a/docs/notes/Java 虚拟机.md b/docs/notes/Java 虚拟机.md
index b756cc00..fafe8242 100644
--- a/docs/notes/Java 虚拟机.md
+++ b/docs/notes/Java 虚拟机.md
@@ -28,6 +28,8 @@
+本文大部分内容参考 **周志明《深入理解 Java 虚拟机》** ,想要深入学习请看原书。
+
# 一、运行时数据区域
@@ -38,11 +40,11 @@
## Java 虚拟机栈
-每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。
+每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。
-可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小:
+可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小:,
```java
java -Xss512M HackTheJava
diff --git a/docs/notes/Socket.md b/docs/notes/Socket.md
index 7cb4614f..35d8d522 100644
--- a/docs/notes/Socket.md
+++ b/docs/notes/Socket.md
@@ -38,7 +38,7 @@ Unix 有五种 I/O 模型:
应用进程被阻塞,直到数据从内核缓冲区复制到应用进程缓冲区中才返回。
-应该注意到,在阻塞的过程中,其它应用进程还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其它应用进程还可以执行,所以不消耗 CPU 时间,这种模型的 CPU 利用率效率会比较高。
+应该注意到,在阻塞的过程中,其它应用进程还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其它应用进程还可以执行,所以不消耗 CPU 时间,这种模型的 CPU 利用率会比较高。
下图中,recvfrom() 用于接收 Socket 传来的数据,并复制到应用进程的缓冲区 buf 中。这里把 recvfrom() 当成系统调用。
diff --git a/notes/Java 虚拟机.md b/notes/Java 虚拟机.md
index 88c88fac..c1f257e3 100644
--- a/notes/Java 虚拟机.md
+++ b/notes/Java 虚拟机.md
@@ -28,6 +28,8 @@
+本文大部分内容参考 **周志明《深入理解 Java 虚拟机》** ,想要深入学习请看原书。
+
# 一、运行时数据区域
@@ -38,11 +40,11 @@
## Java 虚拟机栈
-每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。
+每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。
-可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小:
+可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小:,
```java
java -Xss512M HackTheJava
diff --git a/notes/Socket.md b/notes/Socket.md
index 82021276..8c580ab9 100644
--- a/notes/Socket.md
+++ b/notes/Socket.md
@@ -38,7 +38,7 @@ Unix 有五种 I/O 模型:
应用进程被阻塞,直到数据从内核缓冲区复制到应用进程缓冲区中才返回。
-应该注意到,在阻塞的过程中,其它应用进程还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其它应用进程还可以执行,所以不消耗 CPU 时间,这种模型的 CPU 利用率效率会比较高。
+应该注意到,在阻塞的过程中,其它应用进程还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其它应用进程还可以执行,所以不消耗 CPU 时间,这种模型的 CPU 利用率会比较高。
下图中,recvfrom() 用于接收 Socket 传来的数据,并复制到应用进程的缓冲区 buf 中。这里把 recvfrom() 当成系统调用。