JVM学习笔记——垃圾回收篇( 八 )

那么我们该怎么进行调优呢:

  • 最简单的方法就是适当扩大新生代空间即可
  • 新生代不易太?。喝绻律【突岬贾虏欢戏⑸鷐inor GC浪费时间,且幸存区过小导致无用数据都存入老年代
  • 新生代不易太大:如果新生代过大相对老年代空间变?。?容易发生Full GC , Full GC的运行时间过长
那么官方认可的新生代大小为多少:
  • 新生代能容纳所有[并发量*(请求-响应)]的数据
新生代幸存区调优首先我们需要直到新生代幸存区存放的数据主要分为两部分:
  • 当前活跃对象:并不应该晋级到老年代,只是目前阶段需要使用的内存数据
  • 需要晋升对象:我们一直使用的内存数据,需要传递到老年代
首先我们需要保证具有一定的幸存区大?。?
  • 如果幸存区过?。突岬贾滦掖媲萏崆敖氲嚼夏甏?/li>
  • 但如果是当前活跃对象进入到老年代,既不能发挥作用,并且也难以排出老年代
其次我们需要控制晋升标准:
  • 设置一定规格的晋升标准,防止部分当前活跃对象进入到老年代,理由同上
老年代调优最后我们介绍一下老年代调优,我们这里以CMS为例:
  • 首先CMS老年代内存越大越好
  • 其次在不做调优的情况下,如果没有发生Full GC就不需要调优了,否则优先调优新生代
  • 如果经常发生Full GC,我们就需要将老年代空间增大了,官方推荐增大目前老年代空间大小的1/4~1/3即可
调优案例展示最后我们介绍三个调优方法的案例:
  1. Full GC和Minor GC频繁
/*主要是因为新生代空间不足因为新生代空间不足 , 经常发生minor GC,同时幸存区空间不足导致大量数据直接进入到老年代,最后导致老年代也产生Full GC*/
  1. 请求高峰期发生 Full GC,单次暂停时间特别长 (CMS)
/*首先我们已经直到是CMS的垃圾回收方法我们在之前的学习中得知Full GC主要分为三个阶段:初始标记,并发标记,重新标记在请求高峰期期间,数据较多,我们的重新标记由于需要重新扫描所有数据空间,所以会导致单次暂停时间长我们只需要保证在进行重新扫描前先进行一次Minor GC消除掉无用数据就可以加快暂停速度:-XX:+CMSScavengeBeforeRemark*/
  1. 老年代充裕情况下,发生 Full GC (CMS jdk1.7)
/*首先我们需要注意是jdk1.7版本在1.7版本是由永久代负责管理方法区以及常量池,如果永久代内存满了也会产生Full GC所以我们只需要增加永久代的内存大小即可*/结束语到这里我们JVM的垃圾回收篇就结束了 , 希望能为你带来帮助~
附录该文章属于学习内容,具体参考B站黑马程序员满老师的JVM完整教程
这里附上视频链接:01_垃圾回收概述_哔哩哔哩_bilibili
【JVM学习笔记——垃圾回收篇】

推荐阅读