【问题标题】:Method code too large in Groovy & Grails?Groovy & Grails 中的方法代码太大?
【发布时间】:2014-06-17 05:28:54
【问题描述】:
2014-06-17 11:22:18,622 [Thread-11] ERROR compiler.GrailsProjectWatcher  - Compilation Error: startup failed:
General error during class generation: Method code too large!

解决办法是什么?只需隐藏 4-5 行代码并重新启动即可完全运行成功,bootStrap 文件大小为 149k。当我注释或删除4-5行代码时,它会正常运行!

【问题讨论】:

  • 您能提供更多信息吗? Grails 版本,导致问题的代码...

标签: grails groovy jvm


【解决方案1】:

Java 虚拟机有一个limitation,它的方法不能大于 64k(65536 字节)。这个post 详细描述了这个限制。
解决此问题的最佳方法是将大型方法拆分为较小的方法,这通常是一种很好的做法。

另请注意,JVM JIT 编译器不会编译大于 8K 的方法。但是,您可以使用 -XX:-DontCompileHugeMethods 选项更改此行为。

【讨论】:

    【解决方案2】:

    问题:刚进入Jenkins管道出现以下异常错误:org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during class generation: Method code too large! java.lang.RuntimeException: Method code too large!

    解释:根本原因与单个方法的字节码限制为64kB有关。 Java虚拟机对类有隐含的限制,根据性能和语言限制必须遵循和限制 - 例如:帧中操作数堆栈的大小,字段和方法名称的长度,方法的数量可以声明在课程等...您可以在Oracle JVM documentation 上关注此“检查清单”。你得到了这个场景的方法大小限制

    解决方案:为了解决这个问题,只需将类方法分成共享库或子内部/外部类(例如Utils.Groovy)并将该库导入您的主班。一般来说,代码应该是可读的、精简的和高级的。如果导出的功能太长,请使用面向对象的架构,您也可以获得可读和可维护的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多