6

我有一个用 bigloo 方案功能语言编写的解析器,我需要将它编译成一个 java 类。整个解析器被编写为单个函数。不幸的是,这导致 JVM 编译器抛出“方法太大”警告,然后给出“localvar 中的远标签”错误。有什么可能的方法可以规避这个错误吗?我在某处读到有关 DontCompileHugeMethods 选项的信息,它有效吗?拆分功能对我来说似乎不是一个可行的选择:( !!

4

4 回答 4

3

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

好吧,这个编译器错误的根本原因是字节码文件的格式存在硬性限制。在这种情况下,问题在于单个方法最多可以包含 65536 个字节的字节码。(请参阅JVM 规范)。

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

于 2010-07-07T08:10:28.390 回答
0

好吧,这里的情况有点不同,该方法只包含一个函数调用。现在这个函数有一个巨大的参数列表(实际上是整个解析器!!)。所以我不知道如何分割这个!!

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

  • 为您的参数定义数据持有者对象(根据您的数据模型的本体将参数集放入对象中),
  • 在自己的上下文中构建这些数据持有者对象
  • 将参数对象传递给函数
于 2010-07-07T08:30:39.717 回答
0

分别拆分相关操作或拆分实用程序中的方法。

于 2010-07-07T08:18:30.800 回答
0

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

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

于 2010-07-07T09:14:50.450 回答