gpt4 book ai didi

java - 即使使用 JIT 编译器,对 Java 应用程序的第一个请求是否总是很慢?

转载 作者:行者123 更新时间:2023-11-30 04:12:48 24 4
gpt4 key购买 nike

我对编译和解释以及 JIT 的工作方式有些困惑。我知道源代码或 Java 程序被编译为 Java 字节代码,然后加载到 JVM,然后 JVM 将字节码解释为 native 机器代码或使用 JIT。

我正在阅读解释器文档,并了解到解释器会分析每个请求的每个语句,然后转换为 native 代码,从而导致性能下降。

还了解到 JIT 进行动态翻译并将 native 代码存储在缓存中,然后用于后续请求。

我想了解的是 JIT 到底是如何工作的?每当向应用程序发出第一个请求时,它就会将该部分字节代码转换为机器代码,存储在缓存中并使用它。这是这个过程吗?如果是这样,那么每个第一个请求是否总是较慢,因为它需要将字节码转换为机器代码?

请详细解释一下。

最佳答案

取决于实现,但至少在 Java 中,JIT 通常是针对“热点”(即频繁使用的代码)进行的。因此,如果 JVM 发现某个方法被调用超过 X 次,它会将其编译为 native 代码。这意味着,您必须先调用它几次,之后它只会变得更快。

此外,JIT 结果通常为 kept in-memory, not saved to disk ,以便该过程在应用程序下次运行时从头开始(这是即时编译和提前编译之间的很大区别,后者发生在程序运行之前)。

understood that an Interpreter analyses each statement on every request and then converts to native code leading to slower performance.

好吧,您会因为等待编译发生一次而遭受性能损失。之后,它执行该方法的已编译 native 代码,在此之前,它解释字节码。如果 JVM 对该方法作为热点的猜测是正确的,那么随着时间的推移,它应该会得到返回。

Is the first request to a Java Application always slow even with JIT Compiler?

如果有的话,JIT 编译器的存在会使第一个(或几个早期)请求变慢,因为它增加了额外的工作。但是,后续请求应该比非 JIT 执行环境快得多。

关于java - 即使使用 JIT 编译器,对 Java 应用程序的第一个请求是否总是很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19216379/

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