【发布时间】:2015-02-18 16:04:51
【问题描述】:
我是 java 新手,很难理解以下内容: 每次运行代码时 jit 都会编译吗? (我知道 jit 优化了经常运行的代码,但我询问的不是“热代码”)
【问题讨论】:
-
对于标准 JITC,它每次都编译“热”代码。已经有 JDK 实现“记住”了以前编译的代码,但我不知道当前使用的任何代码。而且,对于标准 JITC,代码在编译之前必须是“热”的。
我是 java 新手,很难理解以下内容: 每次运行代码时 jit 都会编译吗? (我知道 jit 优化了经常运行的代码,但我询问的不是“热代码”)
【问题讨论】:
JIT 不记得之前运行的任何内容。
这意味着它可能会在您每次运行时编译代码。 JIT 甚至可以在代码运行时重新编译代码,以进一步优化或在检测到代码的使用方式发生变化时进行不同的优化。
不被认为是热的代码将不会被编译,因为这可能比仅使用解释器运行它更昂贵。
当您进行分层编译时(在 Java 8 中默认启用),它会稍微编译一些较热的代码,随着您运行的次数越来越多,它会越来越多地重新编译。它可以经历多个阶段。
如果您想查看正在编译的内容,请在命令行中添加 -XX:+PrintCompilation。
【讨论】: