• JVM:调优


    什么时候会发生垃圾回收

    • MinorGC:Eden区或者S区不够用了
    • MajorGC:老年代不够用了
    • FullGC = MinorGC + MajorGC + MetaSpace GC
    • System.gc()(该方法不会立即唤起gc )

    什么时候需要调优

    • 出现问题:频繁GC?cpu高--->打印GC日志--->结合工具查看---> 修改堆内存空间/垃圾收集器选择
    • cpu持续飙升:top查看哪个进程cpu使用率高--->查看可能的情况情况:线程/堆栈/jvm参数 jstack/jinfo/jmap--->
    • oom:dump文件,分析dump文件--->MAT/其他工具

    如何调优

    1、调整堆大小(调大):Xms、Xmx

    • 提高吞吐量
    • GC次数减少
    • 停顿时间变大(空间变大了,打扫时间变长)

    2、设置停顿时间(G1)(调小):-XX:MaxGCPauseMillis=15

    • 停顿时间变小
    • GC次数变多
    • 吞吐量无太大变化
      切记不要手动调整young区大小,设置停顿时间的时候会自适应地调整young区的大小。

    3、启动并发GC时(堆内存使用占比)调

    G1和CMS的区别

    • CMS:标记-清除 空间碎片;G1:标记-整理 减少空间碎片
    • CMS:分新生代老年代。引用Card Table;G1:分region,物理上不分young和old区,只有逻辑上区分。Remerbered Set RSet,谁引用了我
    • G1:多核、大内存,G1停顿时间。

    总结

  • 相关阅读:
    Attribute+Reflection,提高代码重用
    类型安全的EventHandlerList
    简单一招,使解决方案下的项目版本号统一
    T-SQL 随机返回特定行数据和分页查询
    2013年中国系统架构师大会随想
    C#实现在注册表中保存信息
    滤镜
    蒙版
    图层样式和混合模式
    布尔运算
  • 原文地址:https://www.cnblogs.com/fcb-it/p/13363504.html
Copyright © 2020-2023  润新知