JVM调优

作者 : admin 本文共825个字,预计阅读时间需要3分钟 发布时间: 2024-06-10 共3人阅读
  1. 哪些对象会被存放在老年代
    1. 新生代对象每次经历一次minor gc,年龄就会加1,当达到年龄阈值(默认为15岁),会直接进入老年代
    2. 大对象直接进入老年代
    3. 新生代复制算法需要一个survivor区进行轮换备份,如果出现大量对象在minor GC后仍然存活的情况时,就需要老年代进行分配担保,让survivor无法容纳的对象直接进入老年代
    4. 如果在survivor空间中相同年龄所有对象大小的总和大于survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代
  2. 什么时候触发full GC
    1. 调用System.gc时。系统建议执行full gc,但是不必然执行
    2. 老年代空间不足
    3. 方法区空间不足
    4. 通过Minor GC 后进入到老年代的平均大小大于老年代的可用内存
    5. 由Eden区,From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小
  3. JVM调优经验和方案
    1. 调优时机:
      1. heap内存(老年代)持续上涨到设置的最大内存值
      2. Full GC 次数频繁
      3. GC停顿时间过长(超过1秒)
      4. 应用出现OOM等内存异常
      5. 应用中有使用本地缓存且占用大量内存空间
      6. 系统吞吐量与响应性能不高或下降
    2. 调优原则:
      1. 多数的java应用不需要在服务器上进行JVM优化
      2. 多数导致GC问题的java应用,都不是因为我们参数设置错误,而是代码问题
      3. 在应用上线之前,先考虑将机器的JVM参数设置到最优(最合适)
      4. 减少创建对象的数量
      5. 减少使用全局变量和大对象
      6. JVM优化是到最后不得已才采用的手段
      7. 在实际应用中,分析GC情况优化代码比优化JVM参数更好
    3. 调优目标
      1. GC低停顿
      2. GC低频率
      3. 低内存占用
      4. 高吞吐量
    4. 调优步骤
      1. 分析GC日志及dump文件,判断是否需要优化,确定瓶颈问题点
      2. 确定JVM调优量化目标
      3. 确定JVM调优参数(根据历史JVM参数来调整)
      4. 调优一台服务器,对比观察调优前后的差异
      5. 不断地分析和调整,直到找到合适的JVM参数配置
      6. 找到合适的参数,将这些参数应用到所有服务器,并进行后续跟踪
本站无任何商业行为
个人在线分享 » JVM调优
E-->