gpt4 book ai didi

java - 验证编译器内联对象创建/方法调用

转载 作者:行者123 更新时间:2023-11-30 06:52:22 25 4
gpt4 key购买 nike

假设我有这样的代码:

public class InlineTest {
private String test() {
return "test";
}

public static void main(String[] args) {
System.out.println(
new InlineTest().test()
);
}
}

我知道 Java HotSpot 足够智能 inline new InlineTest().test() 的对象创建和方法调用。

但是我无法检查内联是否真的应用了!

问题 1:是否可以通过检查字节码来验证内联?怎么办?

如果这不是一个选项:

问题 2:除了反汇编代码之外还有其他可能性吗?

PS 我有 Java HotSpot(TM) 64 位服务器虚拟机(版本 25.111-b14,混合模式)

最佳答案

关于字节码:字节码级别没有内联。因此,通过反汇编该字节代码无法观察到任何内容。

关于JIT部分:参见here例如(或 theree 对于 IBM java)。但你必须明白,这些事情取决于你的 JVM 版本;据我所知,没有任何方法可以让您了解所有类型的 JVM(Oracle、IBM、Azuul...)每个实现到底在幕后做什么。

除此之外:请记住,JIT 是高度动态的。它可能不会立即内联方法,但可能稍后某个时间点。这个想法是,JIT 根据运行时数据决定将应用哪种优化。当 JIT 后来发现可能有更好的机器指令序列时,它甚至可能会返回并重新编译方法......

关于java - 验证编译器内联对象创建/方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42506334/

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