JIT

作者: 半路自由 | 来源:发表于2020-01-02 13:16 被阅读0次
    image.png

    1、选择编译器的类型

    (1)-server 编译慢,速度快
    (2)-client 编译快,速度慢点
    (3)-XX:+TieredCompilation 分层编译

    2、代码缓存相关

    -XX:ReservedCodeCacheSize=100M

    代码缓存满了可能会报错CodeCached is full
    1.7缺省 32M--48M(可以适当调大)
    1.8 240M

    3、编译阈值

    方法调用计数器,循环回边计数器(循环完成的次数)
    计数器是有衰减的
    -UseCounterDecay是否启用衰减计数
    -XX:CounterHalfLifeTime参数,控制半衰期的周期

    a(){for(){....}}
    

    4、编译线程

    5、方法内联

    -XX:默认是开启的
    内不内联跟方法热度有关系


    image.png

    字节码小于325字节码才会内联, -XX:MaxFreInlinesSize =325( 缺省,可以设置)
    方法小于35个字节码直接内联 -XX:MaxInlineSize

    6、逃逸分析

    尽量使用默认的参数

    二、GC调优

    1、gc调优的目的

    GC的时间够小
    GC的次数够少

    2、调优的原则

    (1)大多数的java应用不需要GC调优
    (2)大部分需要GC调优的,不是参数问题,是代码问题
    (3)GC调优是最后的手段,尽量别动就好了
    第一位:选择合适的GC回收器
    第二位:选择合适的堆得大小
    第三位:选择 年轻代在堆中的比重
    调优步骤
    1、监控GC的状态
    2、分析结果,判断是否要优化
    minor GC 时间<50ms 10S一次
    FullGC执行时间1s左右,频率在10分钟以上,GC不需要调优

    不断测试,和生产对比,最后在确认上线

    3、阅读GC日志

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeadDumpPath 这两个在生产上必须加上
    -XX:+PrintGCDetails -Xlogger:logpath 这两个在可以在刚上生产的时候加上,前期监控,后面稳定了就可以关闭
    -XX:PrintHeapAtGC 查看回收后的内存信息
    -XX:TraceClassLoading 类加载顺序

    吞吐量应用,年轻代大一点,老年代可以小一点

    相关文章

      网友评论

          本文标题:JIT

          本文链接:https://www.haomeiwen.com/subject/abyonctx.html