1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Update JVM垃圾回收.md

This commit is contained in:
Snailclimb 2019-12-19 15:29:08 +08:00
parent 7d95de7e7d
commit c93d911b01

View File

@ -48,7 +48,7 @@
- 如何判断一个类是无用的类 - 如何判断一个类是无用的类
- 垃圾收集有哪些算法,各自的特点? - 垃圾收集有哪些算法,各自的特点?
- HotSpot 为什么要分为新生代和老年代? - HotSpot 为什么要分为新生代和老年代?
- 常见的垃圾回收器有些? - 常见的垃圾回收器有些?
- 介绍一下 CMS,G1 收集器。 - 介绍一下 CMS,G1 收集器。
- Minor Gc 和 Full GC 有什么不同呢? - Minor Gc 和 Full GC 有什么不同呢?
@ -71,7 +71,7 @@ Java 堆是垃圾收集器管理的主要区域,因此也被称作**GC 堆G
</div> </div>
上图所示的 eden 区、s0("From") 区、s1("To") 区都属于新生代tentired 区属于老年代。大部分情况,对象都会首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入 s1("To"),并且对象的年龄还会加 1(Eden 区->Survivor 区后对象的初始年龄变为 1),当它的年龄增加到一定程度(默认为 15 岁),就会被晋升到老年代中。对象晋升到老年代的年龄阈值,可以通过参数 `-XX:MaxTenuringThreshold` 来设置。经过这次GC后Eden区和"From"区已经被清空。这个时候,"From"和"To"会交换他们的角色,也就是新的"To"就是上次GC前的“From”新的"From"就是上次GC前的"To"。不管怎样都会保证名为To的Survivor区域是空的。Minor GC会一直重复这样的过程直到“To”区被填满"To"区被填满之后,会将所有对象移动到老代中。 上图所示的 eden 区、s0("From") 区、s1("To") 区都属于新生代tentired 区属于老年代。大部分情况,对象都会首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入 s1("To"),并且对象的年龄还会加 1(Eden 区->Survivor 区后对象的初始年龄变为 1),当它的年龄增加到一定程度(默认为 15 岁),就会被晋升到老年代中。对象晋升到老年代的年龄阈值,可以通过参数 `-XX:MaxTenuringThreshold` 来设置。经过这次GC后Eden区和"From"区已经被清空。这个时候,"From"和"To"会交换他们的角色,也就是新的"To"就是上次GC前的“From”新的"From"就是上次GC前的"To"。不管怎样都会保证名为To的Survivor区域是空的。Minor GC会一直重复这样的过程直到“To”区被填满"To"区被填满之后,会将所有对象移动到老代中。
![堆内存常见分配策略 ](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/堆内存.jpg) ![堆内存常见分配策略 ](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/堆内存.jpg)