程序员潇然 发表于 2022-11-15 16:25:09

jvm GC 垃圾收集 分代收集理论 简介(十)

分代理论基于两个假说:

弱分代假说:大多数对象都在年轻时死亡;

强分代假说:对象越老越不容易死;

跨分代假说:跨代引用是极少数;

这是理论研究与实践的产出物,尽管部分还存在争议。

年轻与年老的判别依据是年龄,而分代垃圾收集理论中的年龄就是躲过了几次垃圾收集,这样统计比较方便。

年轻代与老年代有不同的特征,必然是适用于不同的算法,所以通常都是划分成为多个空间,针对不同的空间进行垃圾回收。

分代收集的主要关注点

!(data/attachment/forum/202211/15/165738vwzwqw4a5qmaa64a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")



### 内存划分


区域分为:

`Eden`、`Survivor0`、`Survivor1`、`Old`

!(data/attachment/forum/202211/15/171748w2bblssggi2bie1g.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

通过`jstat`命令可以间接验证

```bash
#4093 是java进程
root@ecs-master:/usr/local/java/jdk1.8.0_333/bin# jstat -gc 4093
S0C    S1C    S0U    S1U      EC       EU      OC         OU       MC   MU    CCSC   CCSU   YGC   YGCT    FGC    FGCT   GCT
1536.0 1536.00.0   1178.2 259072.0 30539.5   262144.0   155371.381536.0 77754.4 10112.0 9494.5   2817   20.080   3      0.432   20.512

```

```html
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
```
页: [1]
查看完整版本: jvm GC 垃圾收集 分代收集理论 简介(十)