我正在运行时为各种目的检测类文件。我为此使用了JVMTI代理。我测试方法的策略是调用RetransformClasses
函数来调用ClassFileLoadHook
。此策略适用于在检测时间之后进一步调用的所有方法,因为实际检测在后续函数调用中发生,但它不适用于任何没有进一步调用的方法,如main
在程序中起作用。
我想在执行过程中动态检测方法。我想要一些程序,如检测代码的堆栈替换(OSR)。 JVMTI中是否有任何可用的策略或任何其他方法????
PS:我打开编辑/修补OpenJDK源代码,如果可以帮助的话。
答案 0 :(得分:2)
经过深思熟虑之后,我相信你要求的东西可能(也许!)在技术上是可能的;但需要付出很多努力;但从概念上来说这不是一个好方法。
我假设您的要求实际上是您希望检测任何类型的应用程序,以便通过“在封面并行化下”来提高其性能。
所以,我没有真正的解决方案,而是主要关注一系列问题:
main()
中的内容都可以从您的优化中受益 - 然后我认为,从概念上讲,您最好设计和实现自己的 JVM。 main()
方法。听起来你打算通过抛弃你的仪器来修复糟糕的设计。我认为更合理的方法是:研究这些应用程序,并改进他们的设计。 换句话说:我猜测你有XY问题; X问题是您正在处理的应用程序可以从“并行化”中受益。但这是“一般”很难做到的事情。
从这个意义上说;我宁愿定义某种架构(可能包括应用程序应该“启动”的具体,明确定义的步骤;以便您的仪器可以成功地完成其工作)并首先获得该方法的经验。含义:告诉你的伙伴们不要在他们的main()
中放入“长跑圈”(如上所述;对我来说,这对我来说听起来非常糟糕!)。