首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用JIT的优化是否只发生一次,并且在运行的生命周期内永远保持不变?

使用JIT的优化是否只发生一次,并且在运行的生命周期内永远保持不变?
EN

Stack Overflow用户
提问于 2014-01-17 21:20:48
回答 3查看 71关注 0票数 2

我读过关于Just-in-time compilers的不同文章,并提到JIT将代码片段(热点)优化为直接的本机代码(机器代码)。我的问题是,每次运行.class file时,是否都会发生这种优化。另一方面,传统的compiled代码被一劳永逸地优化,而不仅仅是在一个execution (例如)中。

这类hot-spot optimizationmachine中的“记忆”在哪里?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-17 21:27:28

这可能取决于JRE实现,但一般来说,每次启动该程序时都会重新执行JIT优化。除其他外,hotspot环境可以根据实际处理的输入数据的运行时分析来更改它们的优化。

是的,这与传统的编译语言有很大的不同。

值得注意的一点是:部分原因在于它依赖于输入,因此不能保证hotspot JIT每次都会以相同的方式优化代码。这使得手工优化Java代码变得更加困难。您确实需要进行完整的概要分析,并且需要对扩展的执行和完整的输入数据进行分析,否则您可能会欺骗自己。我在同一台机器上看到了20%的性能差异,在相同的输入下运行相同的代码,显然是因为JIT以不同的顺序进行了优化,并且在它愿意生成多少本地代码方面遇到了限制。

票数 4
EN

Stack Overflow用户

发布于 2014-01-17 21:24:32

JIT编译器产生的工件只存在于JVM进程的工作内存中。即使在同一过程中,由于一种乐观的假设或另一种假设无效,也经常会重新编译相同的代码。

注意,JIT编译可能比静态编译更具侵略性(在HotSpot上也是如此)--这主要是因为上面提到的乐观假设,静态编译代码负担不起这些假设。

票数 2
EN

Stack Overflow用户

发布于 2014-01-17 21:25:11

及时翻译只存在于程序运行期间。当程序终止时,JIT指令就消失了(但它们可能在下一次执行过程中重新生成--这取决于“热”路径)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21196099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档