如何规避Java编译中的“方法太大”错误?

时间:2010-07-07 08:02:59

标签: java bigloo

我有一个用bigloo scheme函数语言编写的解析器,我需要将其编译成java类。整个解析器都是作为单个函数编写的。不幸的是,这导致JVM编译器抛出“Method too large”警告,然后在localvar中给出“far label”错误。有什么方法可以绕过这个错误吗?我在某处读到了关于DontCompileHugeMethods选项,它有用吗?拆分功能对我来说似乎不太可行:( !!

4 个答案:

答案 0 :(得分:3)

  

有什么方法可以规避这个错误吗?

嗯,这个编译器错误的根本原因是字节码文件的格式存在硬限制。在这种情况下,问题是单个方法最多可包含65536个字节的字节码。 (见JVM spec)。

唯一的解决方法是拆分方法。

答案 1 :(得分:0)

在相关操作中拆分方法或单独拆分实用程序。

答案 2 :(得分:0)

  

嗯,情况有点不同   这里,该方法只包括一个   单一功能调用。现在这个   函数有一个巨大的参数列表(   整个解析器实际上!!)。所以我   没有线索如何拆分!!

分裂这种野兽的方法可能是:

  • 为参数定义数据持有者对象(根据数据模型的本体将参数集放入对象中),
  • 在自己的上下文中构建这些数据持有者对象
  • 将参数对象传递给函数

答案 3 :(得分:0)

快速和肮脏:在函数开头将所有参数分配给同名的类变量(必须重命名参数),然后开始将函数分段并将这些函数放入函数中。这应该保证您的函数基本上将以相同的语义运行。

但是,这不会导致漂亮的代码!