Groovy&中的方法代码太大Grails的?

时间:2014-06-17 05:28:54

标签: grails groovy jvm

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行代码时,它将运行而没有错误!

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:0)

问题:刚在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),然后导入该库在你的主要班级。通常,代码应可读,精简且高级。如果导出时间过长,那么该功能将使用面向对象的体系结构,那么您还将获得可读性和可维护性的代码。