栈上替换、方法内联和代码缓存

本文介绍了JVM中提高执行效率的两种技术:OSR栈上替换和方法内联。栈上替换针对循环次数多但整体调用次数少的函数,当循环达到一定次数后,JVM会将热点代码编译为机器码并切换执行。方法内联则是减少小方法调用开销,通过内联函数内容提升程序性能。同时,文章还讨论了代码缓存大小对JIT编译的影响,当缓存满时,JIT会停止工作,直至GC清理空间。
摘要由CSDN通过智能技术生成

目录

OSR栈上替换

方法内联

代码缓存大小


      上一篇日志讲到使用JIT即使编译方式下代码的执行方式有解释执行和编译执行两种,对于程序中函数的执行,要么是使用解释执行的方式,要么是使用编译执行方式(对于热点代码)编译后得到的机器码执行,这两种方式的切换发生在函数的两次调用间隔,前一次调用时虚拟机没有把这段函数判定为热点代码,后一次调用时发现其是热点代码并且进行了编译,那么就会使用提供的机器码执行。对于大部分的函数执行来说是这样的,但有一些情况例外,如调用次数不多且里面有很多循环操作的函数,举个例子,main()函数里面有一个for循环需要执行1000000次,这种情况下,由于我们的main()只执行一次,不可能被虚拟机判定为热点代码,但是函数体内有一个循环被大量重复执行,按道理来说使用编译执行的方式效率更高,怎么办?

 

OSR栈上替换

      解决上面的问题,虚拟机使用了一种叫OSR(on stack replacement)栈上替换技术,对于函数体内多次循环执行的情况,编译器会记录循环的次数,达到一定的次数后虚拟机就会判定这段代码为热点代码,然后对其即时编译成机器码。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值