【问题标题】:combine multiple java method bytecode sequence组合多个java方法字节码序列
【发布时间】:2014-05-10 17:08:53
【问题描述】:

我想知道是否可以将多个 java 方法字节码序列组合成一个方法。假设我们有一个方法 A,它调用另外两个方法 B1 和 B2。

A bytecode sequences: 

.....
invokevirtual B1 
iload ..
....
invokevirtual B2 
.... 

在运行时,B1 和 B2 可能密切相关,我们希望将 B1 字节码和 B2 字节码以及“invokevirtul B1”和“invokevirtual B2”之间的字节码组合成一个方法。

我不确定是否可以实施,如果可以提供一些线索,我将不胜感激。谢谢。

【问题讨论】:

标签: bytecode java-bytecode-asm bytecode-manipulation


【解决方案1】:

是的,这是可能的,但有一些小的限制。主要限制是单个方法的字节码限制为 65535 字节,但在实践中您不太可能遇到此限制。单个方法中的异常处理程序、局部变量槽和操作数堆栈大小的数量也是有限的,尽管达到这些的可能性更小。

【讨论】:

  • 你知道与这个主题相关的开源项目或文档吗.. 虽然我可以使用 ASM 将两个函数合并为一个方法,但我仍然对如何调用这个新方法知之甚少.. 还有,组合方法有哪些潜在问题?
【解决方案2】:

请参阅我的论文“使用 ASM 框架实现常见字节码转换模式”[1] 中的 ASM 字节码操作框架代码示例。

[1]http://asm.ow2.org/current/asm-transformations.pdf

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 2015-01-15
    • 2011-01-20
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多