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