我有一个用bigloo scheme函数语言编写的解析器,我需要将其编译成java类。整个解析器都是作为单个函数编写的。不幸的是,这导致JVM编译器抛出“Method too large”警告,然后在localvar中给出“far label”错误。有什么方法可以绕过这个错误吗?我在某处读到了关于DontCompileHugeMethods选项,它有用吗?拆分功能对我来说似乎不太可行:( !!
答案 0 :(得分:3)
有什么方法可以规避这个错误吗?
嗯,这个编译器错误的根本原因是字节码文件的格式存在硬限制。在这种情况下,问题是单个方法最多可包含65536个字节的字节码。 (见JVM spec)。
唯一的解决方法是拆分方法。
答案 1 :(得分:0)
在相关操作中拆分方法或单独拆分实用程序。
答案 2 :(得分:0)
嗯,情况有点不同 这里,该方法只包括一个 单一功能调用。现在这个 函数有一个巨大的参数列表( 整个解析器实际上!!)。所以我 没有线索如何拆分!!
分裂这种野兽的方法可能是:
答案 3 :(得分:0)
快速和肮脏:在函数开头将所有参数分配给同名的类变量(必须重命名参数),然后开始将函数分段并将这些函数放入函数中。这应该保证您的函数基本上将以相同的语义运行。
但是,这不会导致漂亮的代码!