当前位置:网站首页>JVM调优简要思想及简单案例-为什么需要JVM调优?

JVM调优简要思想及简单案例-为什么需要JVM调优?

2022-06-23 03:48:00 InfoQ

接下来是一个例子,一个案例,我们什么情况下会需要 JVM 调优?

案例:假设一个订单后台服务,每秒有300个下单请求,服务器为4核8G后台服务每秒处理100-300个请求,每个请求产生的对象内存开销为200KB,那么300个请求每秒会有60MB的内存开销。

一般4核8G给JVM的内存会到4G,堆内存分配3G,新生代1.5G、老年代1.5G。其中新生代Eden和Survivor区域比例为8:1:1,分别为:1.2G、0.15G、0.15G

它会给一些操作系统或者其他程序也会留一些内存空间,它不会全部分配给 JVM 里面,我们假设这个案例里面内存它会分配,然后分配 3 个 G 然后还有一些其他比如说还有一些剩余的一个 G 会分配到比如说方法区这些。

null

每秒300个请求,每秒都会产生60MB的数据占据新生代空间,Eden区域大概需要20s就会被占满。所以每20s之后都会进行新生代GC,除了最近1s还在处理的请求,其他请求早已处理完成,所以基本上一下可以回收掉99%的新生代对象。此时存活对象大概100MB左右。

此时新生代GC之后存活对象100MB会进入Survivor区,再运行20s,Eden区占满,再次回收Eden和Survivor区的对象,存活对象仍然有100MB左右数据进行入另一块Survivor区。

按照上述逻辑,每次新生代垃圾回收后存活对象在100MB左右,也不排除可能会突破150MB的可能,此情况会导致新生代GC发生后,存活对象无法放入Survivor区,会直接进入老年代。即使新生代GC发生后存活对象小于150MB,但是100MB左右的存活对象进入Survivor区,也会触发JVM的动态年龄判断机制,因为这一批对象超过了Survivor区空间大小的50%,此时也可能会直接进入老年代。
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/d0a519e4e966b79135a7c1a00