gpt4 book ai didi

java - 简单的 lambda 结构被替换为内联代码

转载 作者:搜寻专家 更新时间:2023-11-01 02:57:55 24 4
gpt4 key购买 nike

我在高性能代码中使用这些简单的 lambda 接口(interface)。

@FunctionalInterface
public interface Block<T> {
T apply() throws Exception;
}

@FunctionalInterface
public interface Block1 {
void apply() throws Exception;
}

final void func1(final Block1 b){ my implementation ...};
final <T> func(final Block<T> b){ my implementation ...};

我问的是:源代码的jdk字节码,如

func(()->{ generic code inside }); 

Object ret=func(()->{ generic code ... return result })

被内联 block 替换了吗?

最佳答案

在考虑 Java 运行时性能时,字节码(接近)无关紧要。

因为即时编译器在运行时决定生成哪种机器代码。

如果它发现您的方法值得内联,它就会这样做——不管字节码说什么。

如果它发现您的方法没有被足够频繁地调用以进行 JIT 处理...那么它们的实现无论如何都无关紧要。

从这个意义上讲:为了理解代码的真实运行时行为,您必须做两件事:A) 研究JIT 的工作原理(请参阅here 例如)和 B) 运行时分析。了解您的数据和代码在您的配置中到底发生了什么。

如果您询问 lambda 的一般工作原理:它们通常使用 invokedynamic 字节码指令调用(请参阅 here 了解详细信息)。

关于java - 简单的 lambda 结构被替换为内联代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47753781/

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