Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AOT仪器是什么意思?_Java_Bytecode_Instrumentation_Jvm Bytecode_Quasar - Fatal编程技术网

Java AOT仪器是什么意思?

Java AOT仪器是什么意思?,java,bytecode,instrumentation,jvm-bytecode,quasar,Java,Bytecode,Instrumentation,Jvm Bytecode,Quasar,我知道字节码插装是什么。它只是在运行时更改.class文件字节码,这似乎从JDK1.5开始就可用。但是,据说这是在类加载期间,而不是在运行时。 现在我的问题是,什么是AOT或提前检测?什么是相反的程序?随着时间的推移 检测代码类星体光纤依赖字节码 仪器仪表。这可以通过Java代理在类加载时完成, 或者在编译时使用Ant任务 运行InstrumentationJava代理Quasar的轻量级线程 实现依赖于字节码检测。仪器罐 可以在编译时(如下所述)或运行时使用 Java代理。要运行Java代理,

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

现在我的问题是,什么是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。。。但是我让我的答案更精确,以便更好地匹配您更新的问题谢谢您编辑您的答案。现在我可以接受了。