據我所知,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();
}
然而,存在的併發症,例如很長的方法可能是一個非常長的鏈。即使一般情況太困難,盡力而爲的工具也會引起人們的興趣。
編輯:幾種善意的人建議修復生成這些長方法的工具。雖然這是一個很好的想法,但我不能利用這一點。我仍然歡迎任何關於我在上面提出的一般問題的想法。
在我看來,唯一可行的方法是修復產生這個混亂的工具。要麼讓它分裂它的方法,要麼更好:擺脫這種巨大方法的需要。 – 2009-09-30 14:58:08
不幸的是修復這個工具並不是一個真正的選擇。 – 2009-09-30 15:18:18
另外,上面的例子僅用於說明。真正的代碼不會這麼簡單。 – 2009-09-30 15:25:30