我正在构建一个需要在 Java 8 Nashorn 中运行 3rd 方代码的系统,并且我想监视/控制 CPU 和内存使用。我有一个 Byte Buddy 代理,它添加了关于 Javascript 方法进入和退出的建议,但是因为循环被编译为字节码,我还需要增加任何向后的 goto 字节码。它目前似乎不是微不足道的支持,但我可以想象它有能力做到这一点。我应该使用它还是编写低级 ASM 代码来自己做?
问问题
226 次
1 回答
2
我是 Byte Buddy 的开发人员,我不打算支持方法内字节码操作之类的东西,原因如下:
为了在方法中操作字节码,Byte Buddy 公开了它的底层 ASM API,(对我来说)感觉是处理这种详细编辑的最佳方式。除了方法的参数之外,该Advice
组件还做了一些假设,例如空操作数堆栈和局部变量的可覆盖帧。所有这些都使得移植Advice
要在方法内触发的组件而不是在方法之前和之后触发变得不简单。
我考虑添加一些其他组件,以便在某个时候用调度程序调用替换任何方法内方法调用(类似于 Javassists 限制方法内替换),但不会在不久的将来。
于 2016-09-22T20:37:25.913 回答