据我所知,JVM每个方法的编译代码有64KB的限制。我有一个生成要运行的Java代码的工具,有时生成的代码包含比这更长的方法。是否有一种使用过长(> 64kb编译)方法转换Java代码的自动方法?
是否存在一种自动的方式来将一个Java类文件用过长的方法转换成一个产生相同结果但可以编译的结果?
在一个简单的例子,以下代码:
public void longMethod
{
doSomething1();
doSomething2();
/* snip */
doSomething20000();
}
可能被转化为:
public void longMethod
{
longMethod_part1();
longMethod_part2();
/* snip */
longMethod_part10();
}
public void longMethod_part1()
{
doSomething1();
/* snip */
doSomething1000();
}
/* snip */
public void longMethod_part10()
{
doSomething9001();
/* snip */
doSomething10000();
}
然而,存在的并发症,例如很长的方法可能是一个非常长的链。即使一般情况太困难,尽力而为的工具也会引起人们的兴趣。
编辑:几种善意的人建议修复生成这些长方法的工具。虽然这是一个很好的想法,但我不能利用这一点。我仍然欢迎任何关于我在上面提出的一般问题的想法。
+6
在我看来,唯一可行的方法是修复产生这个混乱的工具。要么让它分裂它的方法,要么更好:摆脱这种巨大方法的需要。 –
2009-09-30 14:58:08
+0
不幸的是修复这个工具并不是一个真正的选择。 –
2009-09-30 15:18:18
+0
另外,上面的例子仅用于说明。真正的代码不会这么简单。 –
2009-09-30 15:25:30