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