4

我知道字节码检测是什么。它只是在运行时更改 .class 文件字节码,这似乎从 JDK 1.5 开始可用。但是,据说是在类加载期间而不是运行时。

现在我的问题是,什么是 AOT 或 Ahead of Time 仪器?什么是相反的程序?随着时间的推移仪表?

检测您的代码
Quasar 光纤依赖于字节码检测。这可以在类加载时通过 a 完成Java Agent,或者在编译时使用 Ant 任务完成。

运行 Instrumentation
Java AgentQuasar的轻量级线程实现依赖于字节码检测。检测可以在编译时(下面详述)或在运行时使用 Java 代理执行。要运行 Java 代理,必须将以下内容添加到 java 命令行(或使用您喜欢的构建工具将其添加为 JVM 参数):

-javaagent:path-to-quasar-jar.jar

提前 (AOT)
检测 使用 Quasar 检测程序的简单且更可取的方法是使用 Java 代理,它在运行时检测代码。然而,有时,运行 Java 代理不是一种选择。

Quasar 通过 Ant 任务支持 AOT 检测。该任务位于 co.paralleluniverse.fibers.instrument.InstrumentationTaskquasar-core.jar,它接受要检测的类文件集。并不是所有的类都会被实际检测——只有那些带有 suspendable methods 的类(见下文)——所以只需将程序中的所有类文件都交给任务。事实上,Quasar 本身已经 提前进行了检测

来源

4

1 回答 1

6

提前(AOT)编译/检测就是这样,它发生在运行程序之前。

AOT 的对立面是准时制,即 JIT。它发生在运行时。在 Java 中,类加载是在运行时完成的,并且有一些机制可以处理它。

在您的示例中,AOT 检测是在运行程序之前通过 Ant 任务完成的,并将更改写入.class文件中。

另一种可能的方法是使用 Java 代理执行 JIT。在这种情况下,检测在加载类时在运行时进行,结果不会写入文件,而是必须在每次加载类时重新进行。

有关更多信息,请参阅Wikipedia/Ahead-of-time-compilationWikipedia/Just-in-time-compilation

于 2016-05-12T07:15:25.020 回答