AOT仪器意味着什么?

时间:2016-05-12 06:59:07

标签: java bytecode instrumentation jvm-bytecode quasar

我知道字节码检测是什么。它只是在运行时更改.class文件字节码,这似乎是从JDK 1.5开始可用的。但是,据说在课堂加载过程中并不完全是运行时间。

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

  

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

     

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

     

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

   Ahead-of-Time(AOT)仪表
  使用Quasar测量程序的简单和可取的方法是   使用Java代理,它在运行时编写代码。有时,   但是,运行Java代理不是一种选择。

     

Quasar支持使用Ant任务的AOT检测。任务是   co.paralleluniverse.fibers.instrument.InstrumentationTask发现了   quasar-core.jar,它接受​​要检测的类的文件集。   并非所有课程都会被实际检测 - 只有那些课程   suspendable method s(见下文) - 所以简单地完成所有任务   程序中的类文件。实际上,Quasar本身就是仪表化的   的超前-的时间

Source

1 个答案:

答案 0 :(得分:4)

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

与AOT相反的是即时或JIT。它发生在运行时。在java中,类加载是在运行时完成的,并且有一些机制来摆弄它。

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

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

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