Java AOT仪器是什么意思?
我知道字节码插装是什么。它只是在运行时更改.class文件字节码,这似乎从JDK1.5开始就可用。但是,据说这是在类加载期间,而不是在运行时。Java AOT仪器是什么意思?,java,bytecode,instrumentation,jvm-bytecode,quasar,Java,Bytecode,Instrumentation,Jvm Bytecode,Quasar,我知道字节码插装是什么。它只是在运行时更改.class文件字节码,这似乎从JDK1.5开始就可用。但是,据说这是在类加载期间,而不是在运行时。 现在我的问题是,什么是AOT或提前检测?什么是相反的程序?随着时间的推移 检测代码类星体光纤依赖字节码 仪器仪表。这可以通过Java代理在类加载时完成, 或者在编译时使用Ant任务 运行InstrumentationJava代理Quasar的轻量级线程 实现依赖于字节码检测。仪器罐 可以在编译时(如下所述)或运行时使用 Java代理。要运行Java代理,
现在我的问题是,什么是AOT或提前检测?什么是相反的程序?随着时间的推移 检测代码
类星体光纤依赖字节码 仪器仪表。这可以通过
Java代理在类加载时完成,
或者在编译时使用Ant任务
运行Instrumentation
Java代理Quasar
的轻量级线程
实现依赖于字节码检测。仪器罐
可以在编译时(如下所述)或运行时使用
Java代理。要运行Java代理,必须将以下内容添加到
java命令行(或使用您喜爱的构建工具将其添加为
一个JVM参数):
-javaagent:quasar jar.jar的路径
提前(AOT)检测
使用类星体编制程序的简单且更可取的方法是
使用Java代理,该代理在运行时插入代码。有时候,
但是,运行Java代理不是一个选项
Quasar通过Ant任务支持AOT仪器。任务是
co.paralleluniverse.fibers.instrument.InstrumentationTask
在中找到
quasar core.jar
,并且它接受一个类文件集来插入仪器。
并不是所有的类都将被检测——只有那些具有
suspendable方法
s(见下文)–因此只需将所有
在程序中初始化文件。事实上,类星体本身是仪器化的
提前
提前(AOT)编译/插装就是这样,它发生在运行程序之前
AOT的反面是准时制(JIT)。它发生在运行时。在Java中,类加载是在运行时完成的,有一些机制可以处理它
在您的示例中,AOT插装是在运行程序之前通过Ant任务完成的,更改被写入.class
文件中
另一种可能的方法是使用Java代理实现JIT。在这种情况下,当加载类时,插装在运行时发生,结果不会写入文件,而是必须在每次加载类时重新执行
有关更多信息,请参阅和。您有任何参考资料吗?我想说,提前插装
是一种插装机制,插装发生在代码执行之前(并且存储插装的代码以便以后可以执行而不需要重新插装),与之相反的是即时插装
,即每次直接在执行代码之前插装代码。另请参见和检测和JIT优化是不同的事情。@Polygenome不,这似乎是不同的。请看我最新的问题。似乎正是这样。Qasar既可以使用Ant任务进行AOT,也可以使用Java代理进行JIT。。。但是我让我的答案更精确,以便更好地匹配您更新的问题谢谢您编辑您的答案。现在我可以接受了。