JVM 调优简要思想及简单案例 - 怎么调优
看最后一部分,基于上一篇文章的这个条件,我们怎么进行调优?
Survivor 区域是明显不足的。 此场景中大部分对象的生命周期都是极其短暂的,不应该让其频繁进入老年代,同时也没必要给老年代维持过大的空间,尽可能的让对象留在新生代里被回收掉。因为这是一个订单背景的后台,它不会有太多的长生命周期的对象,所以这个目标就是尽可能让对象留在新生代里面就会回收掉。
所以考虑把新生代调整为 2G,老年代调整为 1G,那么此时 Eden 区域大小为 1.6G,每个 Survivor 区大小为 200MB。这个时候 Eden 区域和两个 Survivor 区比例还是 8 比 1 比 1
那这个时候 Survivor 区域变大之后,也就我们刚刚举的这个例子,这 100 MB 的垃圾对象,就能够顺利地进入这个另一个 Survivor 区。在进行下一次垃圾回收的时候,它也能够顺利被顺利地被回收掉,存活数据以及内存占用也就大大降低了。
此时 Survivor 区域变大,也就大大降低了新生代 GC 后存活对象在 Survivor 区放不下的问题,也避免了触发动态年龄判断机制,直接进入老年代的问题。
到这里,JVM 的简要调优的主要内容都讲得差不多了,这只是一个简单的案例以及简要的思想。日常工作中的调优,也基本离不开这种类似的思想:我们尽量让 FULL GC 可能少的发生,老年代 GC 也尽量在没有必要的情况下都让它放到新生代 GC 里面去做。
简单地把一些很浅的东西先拿出来给大家分享一下,让大家有一个印象,如果大家这个已经掌握得很深了,可以进行更多的分享,后续如果有机会,我也会对此专栏进行更深入的研究学习。
版权声明: 本文为 InfoQ 作者【zarmnosaj】的原创文章。
原文链接:【http://xie.infoq.cn/article/c082f40788113fbc365fe062a】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论