JVM 不同GC的性能对比

并行GCVS G1GC

在这里插入图片描述
这里设置最大堆内存均为1g时,并行GC和默认参数下吞吐量明显不同,并行GC的吞吐量少
查看java版本后发现我这里安装的是jdk’9’,而jdk9默认使用G1GC,JDK8默认并行GC。

256m

在这里插入图片描述

其中有一个 compose oops mode,JVM压缩指针 Oracle JDK从6 update 23开始在64位系统上会默认开启压缩指针。
JVM之压缩指针——Compressed oops
zhel 在这里插入图片描述
这里是第一次GC
六行分别是 GC的触发原因对那个区进的GC 内存分配失败 年轻代的内存变化 (G
C) 老年代的内存变化(提升) 元数据区(不变) 总的GC信息(触发原因,总内存变化 总用时 )
在这里插入图片描述
这里还都是youngGC 平均用时18ms/每次
在这里插入图片描述
这里就都是发生的fullGC了,每次GC后young区基本清零,old区略有增加,平均66ms/每次
在这里插入图片描述
这里有一个问题分配内存为256m按理说会崩掉,结果打印详细参数时不会崩掉且,设置的运行时间是2s,结果这里到了2.5s以上,而且仔细看2.14秒的内存还没溢出(这里写在代码里的循环时间控制并不是很精确,可能两秒前进入了GC,暂定掉了工作线程)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加了PrintGCDetails后吞吐量变为原来的1/5了,难怪刚才没有报OOM异常
在这里插入图片描述
另外在程序结束后还有一次总的GC,另外在2s的一个小邻域内可能会有触发一次Gc,所以时间才会超过2s
在这里插入图片描述
在这里插入图片描述
仅仅只打印命令的不同,一个打印在了文件里,也会导致吞吐量的巨大差异
在这里插入图片描述
在这里插入图片描述
可以看出并行GC的吞吐量更好,每次GC的时间更短,并行(平均每次20ms),G1(平均每次40ms,每次stw10ms )延迟更少

串行VS并行

内存1g时,串行的吞吐量居然更好
串行:时间在20~70ms
在这里插入图片描述
并行:时间在10~30ms
在这里插入图片描述
3:
并行:![在这里插入图片描述](https://img-blog.csdnimg.cn/20210117165209987.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RoZWZseWJyaWQ=,size_16,color_FFFFFF,t_70

串行:在这里插入图片描述
3g时,并行不论是在吞吐量还是在单词延迟上都可以完爆串行GC

CMS

jdk9废弃了CMS

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值