1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-20 22:17:09 +08:00

[fix]主要进行gc的区域

This commit is contained in:
guide 2020-08-23 11:15:37 +08:00
parent 733193324f
commit b82a0a8d65

View File

@ -105,13 +105,6 @@ Java 堆是垃圾收集器管理的主要区域,因此也被称作**GC 堆G
大多数情况下,对象在新生代中 eden 区分配。当 eden 区没有足够空间进行分配时,虚拟机将发起一次 Minor GC.下面我们来进行实际测试以下。 大多数情况下,对象在新生代中 eden 区分配。当 eden 区没有足够空间进行分配时,虚拟机将发起一次 Minor GC.下面我们来进行实际测试以下。
在测试之前我们先来看看 **Minor GC 和 Full GC 有什么不同呢?**
- **新生代 GCMinor GC**:指发生新生代的的垃圾收集动作Minor GC 非常频繁,回收速度一般也比较快。
- **老年代 GCMajor GC/Full GC**:指发生在老年代的 GC出现了 Major GC 经常会伴随至少一次的 Minor GC并非绝对Major GC 的速度一般会比 Minor GC 的慢 10 倍以上。
> [issue#664 ](https://github.com/Snailclimb/JavaGuide/issues/664) :**[guang19](https://github.com/guang19)** 补充:个人在网上查阅相关资料的时候发现如题所说的观点。有的文章说 Major GC 与 Full GC 一样是属于对老年代的GC也有的文章说 Major GC 是对整个堆区的GC所以这点需要各位同学自行分辨 Major GC 语义。见: [知乎讨论](https://www.zhihu.com/question/41922036)
**测试:** **测试:**
```java ```java
@ -202,6 +195,27 @@ public class GCTest {
> >
> **Sets the maximum tenuring threshold for use in adaptive GC sizing. The largest value is 15. The default value is 15 for the parallel (throughput) collector, and 6 for the CMS collector.默认晋升年龄并不都是15这个是要区分垃圾收集器的CMS就是6.** > **Sets the maximum tenuring threshold for use in adaptive GC sizing. The largest value is 15. The default value is 15 for the parallel (throughput) collector, and 6 for the CMS collector.默认晋升年龄并不都是15这个是要区分垃圾收集器的CMS就是6.**
### 1.5主要进行 gc 的区域
周志明先生在《深入理解Java虚拟机》第二版中P92如是写道
> ~~*“老年代GCMajor GC/Full GC指发生在老年代的GC……”*~~
上面的说法已经在《深入理解Java虚拟机》第三版中被改正过来了。感谢R大的回答
![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2020-8/b48228c2-ac00-4668-a78f-6f221f8563b5.png)
**总结:**
针对HotSpot VM的实现它里面的GC其实准确分类只有两大种
部分收集 (Partial GC)
- 新生代收集Minor GC / Young GC只对新生代进行垃圾收集
- 老年代收集Major GC / Old GC只对老年代进行垃圾收集。需要注意的是 Major GC 在有的语境中也用于指代整堆收集;
- 混合收集Mixed GC对整个新生代和部分老年代进行垃圾收集。
整堆收集 (Full GC):收集整个 Java 堆和方法区。
## 2 对象已经死亡? ## 2 对象已经死亡?