运城java编程内联缓存的概念与应用方式


[日期:2021-03-19 02:31]   来源:    阅读:

内联缓存是程序员在学习java编程开发技术的时候需要重点掌握的一个编程知识点,而今天我们就再来简单了解一下,内联缓存的概念与应用方式。

运城java编程内联缓存的概念与应用方式

内联缓存是一种加快动态绑定的优化技术。它能够缓存虚方法调用中调用者的动态类型,以及该类型所对应的目标方法。后续执行中,优先使用缓存,没有缓存则使用方发表。

多态优化相关的的术语:

1、单态(monomorphic):指的是仅有一种状态的情况。

2、多态(polymorphic):指的是有限数量种状态的情况,二态是多态的一种。

3、超多态(megamorphic):指的是更多种状态的情况。通常用某个阈值来区分多态和超多态。

所以,内联缓存也有对应的单态内联缓存、多态内联缓存、超多态内联缓存。

单态内联缓存:即只缓存了一种动态类型及所对应的目标方法。他的实现比较简单,即比较所缓存的动态类型,如果命令则直接调用对应的目标方法。

多态内联缓存:则缓存了多个动态类型及所对应的目标方法。它的实现需要逐个将所缓存的动态类型与当前动态类型进行比较,如果命中,则调用所对应的动态方法。

一般来说,我们将更加热门的动态类型放在前面。在实践中大部分的虚方法调用都是单态的,也就是只有一种动态类型。为了节省内存空间,JVM只采用单态内联缓存。

在选择内联缓存时,如果未命中则重新使用方发表做动态绑定。这时有两种选择:

1、替换单态内联缓存中的记录:

这种做法就好比CPU中的数据缓存,他对数据的局部性有要求,即在替换内联缓存之后的一段时间内,方法调用的调用者的动态类型要保持一致,从而能够有效地利用内联缓存。在坏的情况下,用两种不同类型的调用者,轮流的执行该方法调用,那么每次进行执行该方法调用都要替换内联缓存。也就是说,只有写缓存的额外开销,没有用缓存的性能提升。

2、劣化为超多态状态

这也是JVM的具体实现方式。处于这种状态下的内联缓存,实际上放弃了优化的机会。它将直接访问方法表,来动态绑定目标方法。与替换内联缓存记录的做法相比,它牺牲了优化的机会,但节省了写缓存的额外开销。

虽然内联缓存附带了内联二字,但是他并没有内联目标方法。这里需要明确的是,任何方法调用,除非被内联,否则都会有固定开销。这些开销来源于保存程序在该方法中的执行位置,以及新建、压入和弹出新方法所使用的栈帧。

希望这辈子,最让你无悔的事情就是来达内学习!学习向来不是件易事,但无论过程多么艰难,希望你依然热爱生活,热爱学习!永远记得,达内将与你一同前行!现在扫码,立即领取万元课程礼包,助力0基础快速入行,为你梳理行业必备技能,全方位了解岗位发展前景!

【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。


友情链接: