怎么优化JIT

发布时间:2021-08-24 17:39:05 作者:chen
来源:亿速云 阅读:164

本篇内容介绍了“怎么优化JIT”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

什么是JIT

JIT 是 just in time 的缩写, 也就是即时编译编译器。

在运行时 JIT 会把翻译过的机器码保存起来,以备下次使用,因此从理论上来说,采用该 JIT 技术可以接近以前纯编译技术。下面我们看看,JIT 的工作过程。

怎么优化JIT

备注:寄存器的使用是编译器的一个非常普遍的优化。寄存器的速度比主存快很多。

怎么优化JIT编译

从优化的角度讲,最简单的选择就是使用 server 编译器的分层编译技术,这将解决大约 90%左右的与编译器直接相关的性能问题。最后,请保证代码缓存的大小设置的足够大,这样编译器将会提供最高的编译性能。

HotSpot中的JIT编译器

1.1 编译器和解释器

HotSpot中有编译器和解释器并存。

HotSpot中内置两个JIT编译器:

JVM根据自身版本和机器硬件性能自动选择

解释器和编译器搭配使用成为混合模式(Mixed Mode)

分层编译:根据比那一起编译,优化的规模耗时,划分出不同的编译层次

分层编译后,Client Compiler和Server Compiler将会同时工作,代码可能会被多次编译,用Client获得更高的编译速度,用Server获得更好的编译质量,解释执行的时候无需搜集性能监控信息

1.2 编译对象和触发条件

热点代码有两类:

判断热点的方法主要有两种:

基于采样的热点探测(Sample Based Hot Spot Detection):周期性检查各个线程的栈顶,发现某个(某些)方法经常出现在栈顶,就是热点方法 有点简单高效,可以获取方法调用关系(将调用堆栈展开即可) 缺点是很难精确确认方法热度,容易受到线程阻塞等外界因素影响 基于计数器的热点探测(Counter Based Hot Spot Detection):为每个方法(甚至代码块)建立计数器,统计方法调用次数,如果执行超过阈值就认为是热点方法。缺点是实现较为困难。优点是结果更精确。

基于计数器的探测: Client模式下默认1500次,Server下默认10000次,根据参数-XX:CompileThreshold设定。 调用一个方法,先检查是否存在JIT编译版本本地代码,存在优先使用本地代码,不存在将计数器加1。然后判断调用计数器和回边计数器之和是否大于阈值,如果超过,用JIT编译器提交编译请求。JIT编译完成后方法调用入口就被系统换成新的。下次调用已编译版本。 计数器热度衰减(Counter Decay超过一定的时间限度,方法的调用次数仍未达到阈值,方法计数器减少一半。在垃圾收集期间执行,用-UseCounterDecay来关闭,以统计绝对次数。用-XX:CounterHalfLifeTime设置半半衰周期。 回边计数器:统计方法中方法体代码执行的次数,在字节码中遇到控制流向后跳动的指令成为回边(Back Edge)。 回边计数器阈值可以用-XX:OnStackReplacePercentage来间接调整。 回边计数器没有热度衰减过程。

1.3 编译过程

JVM默认情况下对于即时编译请求在编译完成之前,都按照解释方式执行,编译动作在后台线程执行

参数-XX:-BackgroundCompilation禁止后台编译,此时编译请求会等待,直到编译完成后直接执行本地代码

“怎么优化JIT”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. PostgreSQL11 编译支持JIT功能
  2. 使用JIT管理Azure VM访问

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jit

上一篇:mysql传统主从复制的部署过程

下一篇:在Linux系统下如何挂载数据盘

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》