jvm gc 原理测试


测试时使用的jvm版本

java version "1.8.0_60"

Java(TM) SE Runtime Environment (build 1.8.0_60-b27)

Java HotSpot(TM) Client VM (build 25.60-b23, mixed mode, sharing)


测试源码

public class TestGC {
static Map<String, String> map = new HashMap<String, String>();
public static void main(String[] args) throws InterruptedException {
Thread.sleep(10000);
int i = 0;
while (true) {
String str = new String(i + "");
Thread.sleep(1);
if (i++ % 1000 == 0) {
map.put(i + "", str);
}
}
}
}

在window系统下打开cmd窗口 输入命令:jstat -gc pid interval


显示内容说明

 S0C:年轻代中第一个survivor(幸存区)的容量 (字节) 
         S1C:年轻代中第二个survivor(幸存区)的容量 (字节) 
         S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节) 
         S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节) 
         EC:年轻代中Eden(伊甸园)的容量 (字节) 
         EU:年轻代中Eden(伊甸园)目前已使用空间 (字节) 
         OC:Old代的容量 (字节) 
         OU:Old代目前已使用空间 (字节) 
         PC:Perm(持久代)的容量 (字节) 
         PU:Perm(持久代)目前已使用空间 (字节) 
         YGC:从应用程序启动到采样时年轻代中gc次数 
         YGCT:从应用程序启动到采样时年轻代中gc所用时间(s) 
         FGC:从应用程序启动到采样时old代(全gc)gc次数 
         FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s) 
         GCT:从应用程序启动到采样时gc用的总时间(s) 

分析:


JVM的GC采用的是分代式垃圾回收,在对象的生命周期内对象的引用可能出现不同区域内,垃圾回收过程中可能将对象移动到不同的区域

1.在EU=EC时表明Eden区域的空间已经不够了,此时触发一次PSYoungGC回收Eden区的垃圾,不能被清除的对象将被转移到survivor区


2.survivor区的对象被转移到Old Space

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值