我知道字节码检测是什么。它只是在运行时更改.class文件字节码,这似乎是从JDK 1.5开始可用的。但是,据说在课堂加载过程中并不完全是运行时间。
现在我的问题是,什么是AOT或Ahead of Time仪器?相反的程序是什么?随着时间的推移?
检测代码
Quasar光纤依赖于字节码 仪器仪表。这可以通过Java Agent
在类加载时完成, 或者在编译时使用Ant任务。运行Instrumentation
Java AgentQuasar
的轻量级线程 实现依赖于字节码检测。仪表可以 在编译时(详见下文)或在运行时使用执行 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本身就是仪表化的 的超前-的时间
答案 0 :(得分:4)
Ahead-of-time(AOT)编译/检测就是这样,它在运行程序之前发生。
与AOT相反的是即时或JIT。它发生在运行时。在java中,类加载是在运行时完成的,并且有一些机制来摆弄它。
在您的示例中,AOT检测是在运行程序之前通过Ant任务完成的,并且更改将写入.class
文件。
另一种可能的方法是使用Java代理进行JIT。在这种情况下,检测在加载类时在运行时进行,结果不会写入文件,而是每次加载类时都必须完成敬畏。
有关详细信息,请参阅Wikipedia/Ahead-of-time-compilation和Wikipedia/Just-in-time-compilation。