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