栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java-调用静态方法与手动内联-性能开销

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java-调用静态方法与手动内联-性能开销

我看过类似的东西。“手动内联”并不一定会更快,结果程序可能太复杂而无法让优化程序进行分析。

在您的示例中,让我们做出一些疯狂的猜测。当您使用swap()方法时,JVM可能能够分析方法主体,并得出结论,由于i和j不变,尽管有4个数组访问,但仅需要2个范围检查而不是4。

t
不需要局部变量,JVM可以使用2个寄存器来完成工作,而无需涉及
t
堆栈上的读/写操作。

稍后,swap()的主体被内联到调用方方法中。那是在先前的优化之后,因此保存仍然存在。调用者方法主体甚至有可能证明i和j始终在范围内,因此剩余的2个范围检查也将被丢弃。

现在,在手动内联版本中,优化器必须立即分析整个程序,变量太多,动作太多,可能无法证明保存范围检查或消除局部变量是安全的

t
。在最坏的情况下,此版本可能会花费6个以上的内存访问来执行交换,这是
巨大的 开销。即使只读取1个额外的内存,它仍然非常引人注目。

当然,我们没有理由相信手动进行“概述”总是更好,即提取一些小方法,希望它会对优化器有所帮助。

-

我了解到的是,忘记手动进行微优化。不是我不关心微性能的提高,不是我一直信任JVM的优化。就是我绝对不知道该怎么做,弊大于弊。所以我放弃了。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/574001.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号