diff --git a/notes/JVM.md b/notes/JVM.md
index d438acb3..e4b18a06 100644
--- a/notes/JVM.md
+++ b/notes/JVM.md
@@ -1,5 +1,5 @@
-* [一、内存模型](#一内存模型)
+* [一、运行时数据区域](#一运行时数据区域)
* [程序计数器](#程序计数器)
* [Java 虚拟机栈](#java-虚拟机栈)
* [本地方法栈](#本地方法栈)
@@ -46,12 +46,13 @@
* [四、JVM 参数](#四jvm-参数)
* [GC 优化配置](#gc-优化配置)
* [GC 类型设置](#gc-类型设置)
+* [参考资料](#参考资料)
-# 一、内存模型
+# 一、运行时数据区域
-
+
注:白色区域为线程私有,蓝色区域为线程共享。
@@ -76,9 +77,27 @@
所有对象实例都在这里分配内存。
-这块区域是垃圾收集器管理的主要区域("GC 堆 ")。现在收集器基本都是采用分代收集算法,因此 Java 堆还可以分成:新生代和老年代,新生代还可以分成 Eden 空间、From Survivor 空间、To Survivor 空间等。
+这块区域是垃圾收集器管理的主要区域("GC 堆 ")。现在收集器基本都是采用分代收集算法,该算法的思想是针对不同的对象采取不同的回收算法,因此虚拟机把 Java 堆分成以下三块:
-不需要连续内存,并且可以通过 -Xmx 和 -Xms 来控制动态扩展内存大小,如果动态扩展失败会抛出 OutOfMemoryError 异常。
+- 新生代(Young Generation)
+- 老年代(Old Generation)
+- 永久代(Permanent Generation)
+
+当一个对象被创建时,它首先进入新生代,之后有可能被转移到老年代中。新生代存放着大量的生命很短的对象,因此新生代在三个区域中垃圾回收的频率最高。为了更高效地进行垃圾回收,把新生代继续划分成以下三个空间:
+
+- Eden 空间
+- From 空间
+- To 空间
+
+
+
+Java 堆不需要连续内存,并且可以通过动态增加其内存,增加失败会会抛出 OutOfMemoryError 异常。
+
+可以通过 -Xms 和 -Xmx 两个虚拟机参数来指定一个程序的 Java 堆内容大小,第一个参数设置最小值,第二个参数设置最大值。
+
+```java
+java -Xms=1M -XmX=2M HackTheJava
+```
## 方法区
@@ -674,3 +693,8 @@ protected synchronized Class> loadClass(String name, boolean resolve) throws C
```java
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize=20m -XX:MaxPermSize=20m -XX:+UseSerialGC -jar java-application.jar
```
+
+# 参考资料
+
+- 深入理解 Java 虚拟机
+- [Jvm memory](https://www.slideshare.net/benewu/jvm-memory)
diff --git a/pics/dc695f48-4189-4fc7-b950-ed25f6c1521708518830.jpg b/pics/dc695f48-4189-4fc7-b950-ed25f6c1521708518830.jpg
new file mode 100644
index 00000000..d612005a
Binary files /dev/null and b/pics/dc695f48-4189-4fc7-b950-ed25f6c1521708518830.jpg differ
diff --git a/pics/ppt_img.gif b/pics/ppt_img.gif
new file mode 100644
index 00000000..8e5ad145
Binary files /dev/null and b/pics/ppt_img.gif differ