diff --git a/README.en.md b/README.en.md
index 2e8d688d..1cf8a107 100644
--- a/README.en.md
+++ b/README.en.md
@@ -33,7 +33,7 @@ Read in other languages: [Mandarin](https://github.com/Snailclimb/JavaGuide/blob
-
+
|
@@ -163,7 +163,25 @@ In addition,[GeeksforGeeks]( https://www.geeksforgeeks.org/fundamentals-of-alg
**Important knowledge points:**
-1. [MySQL Database Indexing Summary](docs/database/mysql/mysql-index.md)
+1.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
2. [Transaction isolation level (graphic detail)](docs/database/mysql/transaction-isolation-level.md)
3. [MySQL's Three Major Logs (binlog, redo log and undo log) Explained](docs/database/mysql/mysql-logs.md)
4. [InnoDB storage engine implementation of MVCC](docs/database/mysql/innodb-implementation-of-mvcc.md)
diff --git a/README.md b/README.md
index 20fcdc97..d6a416e8 100755
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-
+
|
diff --git a/docs/home.md b/docs/home.md
index eee0cc91..18681f2b 100644
--- a/docs/home.md
+++ b/docs/home.md
@@ -19,7 +19,7 @@ title: JavaGuide(Java学习&&面试指南)
-
+
diff --git a/docs/java/jvm/jvm-garbage-collection.md b/docs/java/jvm/jvm-garbage-collection.md
index cb159e6f..11c99494 100644
--- a/docs/java/jvm/jvm-garbage-collection.md
+++ b/docs/java/jvm/jvm-garbage-collection.md
@@ -48,20 +48,20 @@ Java 堆是垃圾收集器管理的主要区域,因此也被称作**GC 堆(G
>
> ```c++
> uint ageTable::compute_tenuring_threshold(size_t survivor_capacity) {
-> //survivor_capacity是survivor空间的大小
-> size_t desired_survivor_size = (size_t)((((double)survivor_capacity)*TargetSurvivorRatio)/100);
-> size_t total = 0;
-> uint age = 1;
-> while (age < table_size) {
-> //sizes数组是每个年龄段对象大小
-> total += sizes[age];
-> if (total > desired_survivor_size) {
-> break;
-> }
-> age++;
-> }
-> uint result = age < MaxTenuringThreshold ? age : MaxTenuringThreshold;
-> ...
+> //survivor_capacity是survivor空间的大小
+> size_t desired_survivor_size = (size_t)((((double)survivor_capacity)*TargetSurvivorRatio)/100);
+> size_t total = 0;
+> uint age = 1;
+> while (age < table_size) {
+> //sizes数组是每个年龄段对象大小
+> total += sizes[age];
+> if (total > desired_survivor_size) {
+> break;
+> }
+> age++;
+> }
+> uint result = age < MaxTenuringThreshold ? age : MaxTenuringThreshold;
+> ...
> }
>
> ```
@@ -155,8 +155,6 @@ Heap
```
-
-
### 1.1 对象优先在 eden 区分配
目前主流的垃圾收集器都会采用分代回收算法,因此需要将堆内存分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。
@@ -167,7 +165,6 @@ Heap
```java
public class GCTest {
-
public static void main(String[] args) {
byte[] allocation1, allocation2;
allocation1 = new byte[30900*1024];
@@ -180,7 +177,7 @@ public class GCTest {

添加的参数:`-XX:+PrintGCDetails`
-
+
运行结果 (红色字体描述有误,应该是对应于 JDK1.7 的永久代):
@@ -244,12 +241,12 @@ public class GCTest {
> size_t total = 0;
> uint age = 1;
> while (age < table_size) {
-> //sizes数组是每个年龄段对象大小
-> total += sizes[age];
-> if (total > desired_survivor_size) {
-> break;
-> }
-> age++;
+> //sizes数组是每个年龄段对象大小
+> total += sizes[age];
+> if (total > desired_survivor_size) {
+> break;
+> }
+> age++;
> }
> uint result = age < MaxTenuringThreshold ? age : MaxTenuringThreshold;
> ...
@@ -270,7 +267,7 @@ public class GCTest {
上面的说法已经在《深入理解 Java 虚拟机》第三版中被改正过来了。感谢 R 大的回答:
-
+
**总结:**
@@ -298,8 +295,6 @@ public class GCTest {
堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断哪些对象已经死亡(即不能再被任何途径使用的对象)。
-
-
### 2.1 引用计数法
给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的。
@@ -323,11 +318,13 @@ public class ReferenceCountingGc {
### 2.2 可达性分析算法
-这个算法的基本思想就是通过一系列的称为 **“GC Roots”** 的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相连的话,则证明此对象是不可用的。
+这个算法的基本思想就是通过一系列的称为 **“GC Roots”** 的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相连的话,则证明此对象是不可用的,需要被回收。
-
+下图中的 `Object 6 ~ Object 10` 之间虽有引用关系,但它们到 GC Roots 不可达,因此为需要被回收的对象。
-可作为 GC Roots 的对象包括下面几种:
+
+
+**哪些对象可以作为 GC Roots 呢?**
- 虚拟机栈(栈帧中的本地变量表)中引用的对象
- 本地方法栈(Native 方法)中引用的对象
@@ -335,6 +332,19 @@ public class ReferenceCountingGc {
- 方法区中常量引用的对象
- 所有被同步锁持有的对象
+**对象可以被回收,就代表一定会被回收吗?**
+
+即使在可达性分析法中不可达的对象,也并非是“非死不可”的,这时候它们暂时处于“缓刑阶段”,要真正宣告一个对象死亡,至少要经历两次标记过程;可达性分析法中不可达的对象被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行 `finalize` 方法。当对象没有覆盖 `finalize` 方法,或 `finalize` 方法已经被虚拟机调用过时,虚拟机将这两种情况视为没有必要执行。
+
+被判定为需要执行的对象将会被放在一个队列中进行第二次标记,除非这个对象与引用链上的任何一个对象建立关联,否则就会被真的回收。
+
+> `Object` 类中的 `finalize` 方法一直被认为是一个糟糕的设计,成为了 Java 语言的负担,影响了 Java 语言的安全和 GC 的性能。JDK9 版本及后续版本中各个类中的 `finalize` 方法会被逐渐弃用移除。忘掉它的存在吧!
+>
+> 参考:
+>
+> - [JEP 421: Deprecate Finalization for Removal](https://openjdk.java.net/jeps/421)
+> - [是时候忘掉 finalize 方法了](https://mp.weixin.qq.com/s/LW-paZAMD08DP_3-XCUxmg)
+
### 2.3 再谈引用
无论是通过引用计数法判断对象引用数量,还是通过可达性分析法判断对象的引用链是否可达,判定对象的存活都与“引用”有关。
@@ -369,19 +379,6 @@ JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为强引
特别注意,在程序设计中一般很少使用弱引用与虚引用,使用软引用的情况较多,这是因为**软引用可以加速 JVM 对垃圾内存的回收速度,可以维护系统的运行安全,防止内存溢出(OutOfMemory)等问题的产生**。
-### 2.4 不可达的对象并非“非死不可”
-
-即使在可达性分析法中不可达的对象,也并非是“非死不可”的,这时候它们暂时处于“缓刑阶段”,要真正宣告一个对象死亡,至少要经历两次标记过程;可达性分析法中不可达的对象被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行 `finalize` 方法。当对象没有覆盖 `finalize` 方法,或 `finalize` 方法已经被虚拟机调用过时,虚拟机将这两种情况视为没有必要执行。
-
-被判定为需要执行的对象将会被放在一个队列中进行第二次标记,除非这个对象与引用链上的任何一个对象建立关联,否则就会被真的回收。
-
-> `Object` 类中的 `finalize` 方法一直被认为是一个糟糕的设计,成为了 Java 语言的负担,影响了 Java 语言的安全和 GC 的性能。JDK9 版本及后续版本中各个类中的 `finalize` 方法会被逐渐弃用移除。忘掉它的存在吧!
->
-> 参考:
->
-> - [JEP 421: Deprecate Finalization for Removal](https://openjdk.java.net/jeps/421)
-> - [是时候忘掉 finalize 方法了](https://mp.weixin.qq.com/s/LW-paZAMD08DP_3-XCUxmg)
-
### 2.5 如何判断一个常量是废弃常量?
运行时常量池主要回收的是废弃的常量。那么,我们如何判断一个常量是废弃常量呢?
@@ -410,8 +407,6 @@ JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为强引
## 3 垃圾收集算法
-
-
### 3.1 标记-清除算法
该算法分为“标记”和“清除”阶段:首先标记出所有不需要回收的对象,在标记完成后统一回收掉所有没有被标记的对象。它是最基础的收集算法,后续的算法都是对其不足进行改进得到。这种垃圾收集算法会带来两个明显的问题:
@@ -445,8 +440,6 @@ JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为强引
## 4 垃圾收集器
-
-
**如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。**
虽然我们对各个收集器进行比较,但并非要挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,**我们能做的就是根据具体应用场景选择适合自己的垃圾收集器**。试想一下:如果有一种四海之内、任何场景下都适用的完美收集器存在,那么我们的 HotSpot 虚拟机就不会实现那么多不同的垃圾收集器了。
diff --git a/docs/java/jvm/memory-area.md b/docs/java/jvm/memory-area.md
index 6fffc0fc..4b9e96ec 100644
--- a/docs/java/jvm/memory-area.md
+++ b/docs/java/jvm/memory-area.md
@@ -1,11 +1,10 @@
---
+title: Java 内存区域详解
category: Java
tag:
- JVM
---
-# Java 内存区域详解
-
如果没有特殊说明,都是针对的是 HotSpot 虚拟机。
## 写在前面 (常见面试题)
diff --git a/docs/java/jvm/pictures/jvm垃圾回收/01d330d8-2710-4fad-a91c-7bbbfaaefc0e.png b/docs/java/jvm/pictures/jvm垃圾回收/01d330d8-2710-4fad-a91c-7bbbfaaefc0e.png
index 7e705e3b..6a6d043f 100644
Binary files a/docs/java/jvm/pictures/jvm垃圾回收/01d330d8-2710-4fad-a91c-7bbbfaaefc0e.png and b/docs/java/jvm/pictures/jvm垃圾回收/01d330d8-2710-4fad-a91c-7bbbfaaefc0e.png differ
diff --git a/docs/java/jvm/pictures/jvm垃圾回收/10317146.png b/docs/java/jvm/pictures/jvm垃圾回收/10317146.png
deleted file mode 100644
index 4250ed27..00000000
Binary files a/docs/java/jvm/pictures/jvm垃圾回收/10317146.png and /dev/null differ
diff --git a/docs/java/jvm/pictures/jvm垃圾回收/11034259.png b/docs/java/jvm/pictures/jvm垃圾回收/11034259.png
deleted file mode 100644
index f0e558e7..00000000
Binary files a/docs/java/jvm/pictures/jvm垃圾回收/11034259.png and /dev/null differ
diff --git a/docs/java/jvm/pictures/jvm垃圾回收/25178350.png b/docs/java/jvm/pictures/jvm垃圾回收/25178350.png
index 7b509797..be0f3d6d 100644
Binary files a/docs/java/jvm/pictures/jvm垃圾回收/25178350.png and b/docs/java/jvm/pictures/jvm垃圾回收/25178350.png differ
diff --git a/docs/java/jvm/pictures/jvm垃圾回收/29176325.png b/docs/java/jvm/pictures/jvm垃圾回收/29176325.png
index e7d026eb..e4406e15 100644
Binary files a/docs/java/jvm/pictures/jvm垃圾回收/29176325.png and b/docs/java/jvm/pictures/jvm垃圾回收/29176325.png differ
diff --git a/docs/java/jvm/pictures/jvm垃圾回收/jvm-gc-roots.drawio b/docs/java/jvm/pictures/jvm垃圾回收/jvm-gc-roots.drawio
new file mode 100644
index 00000000..667f5d1a
--- /dev/null
+++ b/docs/java/jvm/pictures/jvm垃圾回收/jvm-gc-roots.drawio
@@ -0,0 +1 @@
+7Vpbb9owGP01eeyUxLk+AqWdqk2b2qnrniaTmCStiZkxBfrrZycOuSNaURkQ6kPj4zi2z/nOF9tEA6PZ+pbCefydhAhrph6uNXCtmaZh6A7/J5BNjvi+mwMRTUJ5Uwk8JG9IgrpEl0mIFrUbGSGYJfM6GJA0RQGrYZBSsqrfNiW43uscRqgFPAQQt9HfScjiHPVMt8S/oiSKi54Nx89rZrC4Wc5kEcOQrCoQGGtgRAlh+dVsPUJYkFfwkre76andDoyilO3T4Gk2/Jvcx4+Tu19vhrlcJHeP6yvTkoNjm2LGKOQEyCKhLCYRSSEel+iQkmUaIvFYnZcWL4gFYqoGL5QNvhEyl+AzYmwjpYVLRjgUsxmWtQtGycuW3BIZEUxoNiTgBB6aTHnNNMG4gocQedOA4/kkxMh7yZHQgixpgHYwUgQZpBFiu5jbSshjH5EZYnTD21GEIUte6+OAMgij7X2lTvxCSvUe2eyLbB+TDaiUTT73FeKl7OmWP0i/5zlg0RYUY57khHCrOGHoYQ4zAlY8z9aVmJKUSZlMvc32dIqcIOjSJ3T9id6KBTlGRBla75alTWPRwJE5TyZ9w5flVZlCjSIvxpX06emfZRjnYpiO/LWHYSylea5lmB+TZ/GaN3WjLeiBDLNlu1+fQxvGqvsFANV+Af3Em+dE/JbBo2G+WFleMlUtA+2RqRyVmcrqNww4J8M0MpWl/M1u9xPfsbc5XeKbmUo986anPFOhdcKeKtd/xHO/2LJ0vZbdZIVNUUj55J/yG22vAERL44tu2gVQNs5KtdY/EU04h4gW0ziuhOnsmTBtlQnT6fdtx+b2dH3bSJiOrdq2oGPlrGSBUWF/4tmW3e2k5m7WC1Bw6LMDsKdhDFelY0DHQuIi3H7CKU11xo7dVMe5xKHOfQrCd4h24FznmMe2mwLqz7er643qaqNcW3SvNI7Na/a+XvOUem3HfqBjvXq6XnNBYz/gKfdax8nQxWsf8pq7r9d8pV5z+73WcYp1ul6zzWPzmuH1U1/8dH4e3DfznPoNlOH3c++fE/XNsFdPPWi/3bWxrXm2NhhpY0sbjjTfzZAbbcgvbjJkcAdf4a34kEQzHczHOJzQmkjOv6X4CiOT4GqRaTAQRnLm64zJop5fRdl/0dW15vM+PY1PlvdfdJV3w0fgA23QPsjgYrBdW6qUpKihvYQgTqKUFwMunjh4GgppkwDigayYJWGI++Ks/prFcILwEAYvUYY3Oy8D0XBkuRJuw+wveybjLxki+r4CnxF/oPEzsmV2xJ/XEX/G++OPF8tPcbK6ygdNYPwf
\ No newline at end of file
diff --git a/docs/java/jvm/pictures/jvm垃圾回收/jvm-gc-roots.png b/docs/java/jvm/pictures/jvm垃圾回收/jvm-gc-roots.png
new file mode 100644
index 00000000..d0fd1390
Binary files /dev/null and b/docs/java/jvm/pictures/jvm垃圾回收/jvm-gc-roots.png differ
diff --git a/docs/java/jvm/pictures/jvm垃圾回收/rf-hotspot-vm-gc.png b/docs/java/jvm/pictures/jvm垃圾回收/rf-hotspot-vm-gc.png
new file mode 100644
index 00000000..269ffe9b
Binary files /dev/null and b/docs/java/jvm/pictures/jvm垃圾回收/rf-hotspot-vm-gc.png differ
diff --git a/docs/java/jvm/pictures/jvm垃圾回收/run-with-PrintGCDetails.png b/docs/java/jvm/pictures/jvm垃圾回收/run-with-PrintGCDetails.png
new file mode 100644
index 00000000..fee58383
Binary files /dev/null and b/docs/java/jvm/pictures/jvm垃圾回收/run-with-PrintGCDetails.png differ
diff --git a/docs/java/jvm/pictures/jvm垃圾回收/垃圾收集器.png b/docs/java/jvm/pictures/jvm垃圾回收/垃圾收集器.png
deleted file mode 100644
index 62a37beb..00000000
Binary files a/docs/java/jvm/pictures/jvm垃圾回收/垃圾收集器.png and /dev/null differ
diff --git a/docs/java/jvm/pictures/jvm垃圾回收/垃圾收集算法.png b/docs/java/jvm/pictures/jvm垃圾回收/垃圾收集算法.png
deleted file mode 100644
index 6e879634..00000000
Binary files a/docs/java/jvm/pictures/jvm垃圾回收/垃圾收集算法.png and /dev/null differ
diff --git a/docs/java/jvm/pictures/jvm垃圾回收/堆内存.png b/docs/java/jvm/pictures/jvm垃圾回收/堆内存.png
deleted file mode 100644
index 6d1db885..00000000
Binary files a/docs/java/jvm/pictures/jvm垃圾回收/堆内存.png and /dev/null differ
diff --git a/media/sponsor/知识星球.png b/media/sponsor/xingqiu.png
similarity index 100%
rename from media/sponsor/知识星球.png
rename to media/sponsor/xingqiu.png