gpt4 book ai didi

java - 调用虚拟总是动态绑定(bind)吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:46:42 26 4
gpt4 key购买 nike

今天我的一个 friend 告诉我,如果一条指令是 invoke virtual 它总是动态绑定(bind),而 invoke special 总是静态绑定(bind)?是真的吗?

如果是,那么为什么当带有 final 关键字的方法也调用 virtual 时呢?

请澄清我的疑惑

最佳答案

本质上,是的,你是对的。有趣的部分是 Hotspot 的引入。 Hotspot 本质上是另一个编译器,它知道当前加载了哪些类,更可怕的是它知道何时加载新类,并且可以根据更新的知识即时重新编译。 Hotspot 可能会选择使用 javac 不可用的知识来执行删除动态调度的优化。添加 Hotspot 后,简化了 javac 中的代码。 Sun 剥离了很多逻辑,主要是优化部分。

因此,为了回答您的问题,javac 并没有过多关注方法的 final 关键字。它服从于它的大哥 Hotspot。

Oracle 在此处记录了 Hotspot 执行的一些优化:https://wikis.oracle.com/display/HotSpotInternals/PerformanceTechniques .查看方法部分。

关于java - 调用虚拟总是动态绑定(bind)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24551648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com