JVM 篇之 牛刀小试 (PS:之前请教我的小伙子校招去了字节~)
Posted 大鸡腿同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM 篇之 牛刀小试 (PS:之前请教我的小伙子校招去了字节~)相关的知识,希望对你有一定的参考价值。
闲聊
- 最近在学jvm,当然这是一个持续过程,知行合一对吧,学习之后立马去应用,才能验证你学到是不是有用的东西。
- 大家看过我上一篇写的博客么,之前在csdn请教过我的一个小伙子,最近我看他已经入职字节跳动了,我觉得很开心,因为当你身边都是厉害的人,你才有可能成为更优秀的自己。
他当时是参加一个开源社区一个叫开源之夏的活动,就是一些高学历同学,学校还有社区会给他们提供一个机会来接触开源的框架,然后领取任务去实现,当时我记得他去领的是腾讯那套go框架 Tars-Go流量染色功能,刚好那会我也在搞全链路灰度,就指点了一下
JVM 优化一:G1 打开并发标记
在G1的垃圾回收流程中,并发标记是不会stop the world,依靠初始标记的GC ROOT相关的根对象,然后在并发标记的时候,找到对应的引用对象。那么可以打开并发标记,这样提高标记的效率~
我们从下面 测试环境跟本地调优差异 就能看到开启并发标记的垃圾回收时间会快很多。
年轻代参数
当没有设置年轻代容量的时候,我们算下S0C+S1C+EC Eden+2Survivor内存大概600M
那么我们设置-Xmn500m参数的时候,我们可以看到ygc时间更长
所以年轻代参数暂时不设置!当然这个需要具体一个一个数值去尝试。
测试环境跟本地调优差异
现象:通过jstat -gc 1 2000 10发现测试环境的YGC时间比本地长很多
加上 -XX:+PrintGCDetails
本地
测试环境
结果:我们可以看到G1标识清理时间比本地是要时间长很多的,原因大概是机器处理线程数不一样,我们知道G1在垃圾回收阶段:1、初始标记 2、并发标记 3、重新标记 4、标记-清理 并发标记阶段,跟处理线程数量是有关系的。
看下第二行打印:Using 8 workers of 8 for evacuation 本地是8个处理线程数,测试环境是2个处理线程数
以上是关于JVM 篇之 牛刀小试 (PS:之前请教我的小伙子校招去了字节~)的主要内容,如果未能解决你的问题,请参考以下文章