Saq*_*med 9 java instrumentation jit jvm-hotspot jvmti
我正在运行时为各种目的检测类文件.我正在使用JVMTI代理.我测试方法的策略是调用RetransformClasses
函数来调用ClassFileLoadHook
.此策略适用于在检测时间之后进一步调用的所有方法,因为实际检测在后续函数调用中发生,但它不适用于任何没有进一步调用的方法,如main
程序中的函数.
我想在执行过程中即时检测方法.我想要一些程序,如检测代码的堆栈替换(OSR).在JVMTI或任何其他方法中是否有任何策略?
PS:如果能有所帮助,我愿意编辑/修补OpenJDK源代码.
经过进一步的思考,我相信您所要求的东西在技术上可能(也许!)是可能的;但需要付出很多努力;但从概念上讲,这不是一个好方法。
我假设您的要求实际上是您想要检测向您抛出的任何类型的应用程序,以便通过“幕后并行化”来提高其性能。
因此,我主要有一系列的担忧,而不是真正的解决方案:
main()
可以从您的优化中受益 - 那么我认为,从概念上讲,您最好设计和实现自己的JVM。main()
已经运行“长时间循环”的方法。听起来你打算通过使用仪器来修复糟糕的设计。我认为更明智的方法是:研究此类应用程序,并改进其设计。换句话说:我猜你有一个 XY 问题;X 问题是您正在处理的应用程序可以从“并行化”中受益。但这是“一般而言”很难做到的事情。
从这个意义上说;我宁愿定义某种架构(可能包括应用程序应如何“启动”的特定的、定义明确的步骤;以便您的仪器可以成功地完成其工作)并首先获得该方法的经验。意思是:告诉你的人一开始就不要将“长时间运行的循环”放入他们的main()
程序中(如上所述;对我来说,这听起来像是非常糟糕的设计!)。