【问题标题】:Does Java jit compiler compiles its code every time it runs?Java jit 编译器每次运行时都会编译它的代码吗?
【发布时间】:2015-02-18 16:04:51
【问题描述】:

我是 java 新手,很难理解以下内容: 每次运行代码时 jit 都会编译吗? (我知道 jit 优化了经常运行的代码,但我询问的不是“热代码”)

【问题讨论】:

  • 对于标准 JITC,它每次都编译“热”代码。已经有 JDK 实现“记住”了以前编译的代码,但我不知道当前使用的任何代码。而且,对于标准 JITC,代码在编译之前必须是“热”的。

标签: java jvm jit


【解决方案1】:

JIT 不记得之前运行的任何内容。

这意味着它可能会在您每次运行时编译代码。 JIT 甚至可以在代码运行时重新编译代码,以进一步优化或在检测到代码的使用方式发生变化时进行不同的优化。

不被认为是热的代码将不会被编译,因为这可能比仅使用解释器运行它更昂贵。

当您进行分层编译时(在 Java 8 中默认启用),它会稍微编译一些较热的代码,随着您运行的次数越来越多,它会越来越多地重新编译。它可以经历多个阶段。

如果您想查看正在编译的内容,请在命令行中添加 -XX:+PrintCompilation

【讨论】:

  • 究竟是什么让“冷”代码的编译成本比它的解释成本高?
  • @qwwdfsad 代码编译必须完成解释器对所有代码所做的一切,而不仅仅是运行分支,还要将其合理有效地转换为相同的本机代码,然后才能运行它。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 2012-04-28
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 2010-11-18
相关资源
最近更新 更多