我有一个不寻常的要求:我的应用程序会自动从一个非常长的脚本(用一种动态类型语言编写)生成Java代码。这个脚本非常长,以至于我达到了JVM的最大方法大小65k的限制。
脚本只包含有关原始类型的简单指令(除数学指令外没有调用其他函数)。它可能看起来像:
我的第一个想法是克服方法大小限制的方法如下:
脚本只包含有关原始类型的简单指令(除数学指令外没有调用其他函数)。它可能看起来像:
...
a = b * c + sin(d)
...
if a>10 then
e = a * 2
else
e = a * abs(b)
end
...
...被转化为:
...
double a = b * c + Math.sin(d);
...
double e;
if(a>10){
e = a * 2;
}else{
e = a * Math.abs(b);
}
...
我的第一个想法是克服方法大小限制的方法如下:
- 将所有局部变量转换为字段
- 将代码每100行(如果需要,在if / else块中更长)拆分成单独的方法。
类似于:
class AutoGenerated {
double a,b,c,d,e,....;
void run1(){
...
a = b * c + sin(d);
...
run2();
}
void run2(){
...
if(a>10){
e = a * 2;
}else{
e = a * Math.abs(b);
}
...
run3();
}
...
}
你知道其他更有效的方法吗?请注意,我需要代码尽可能快地运行,因为它将在长循环中执行。我不能编译成C,因为互操作性也是一个问题...
我也会感激指向可能有帮助的库的指针。