我有一个项目正在生成编译时堆栈溢出错误。
我正在使用Quill进行持久化,它使用了宏。我有一个包含600多个字段的case类,它代表一个数据库表。
在编译过程中,我得到以下无限递归:
ervice.scala:27:更新email_user设置password_hash =吗?在哪里user_id =? [info] .run(quote {[info] ^ java.lang.StackOverflowError at scala.tools.nsc.transform.Erasure $ Eraser.adaptMember(Erasure.scala:686) 在scala.tools.nsc.transform.Erasure $ Eraser.typed1(Erasure.scala:773) 在 scala.tools.nsc.typechecker.Typers $ Typer.runTyper $ 1(Typers.scala:5584) 在 scala.tools.nsc.typechecker.Typers $ Typer.typedInternal(Typers.scala:5616) 在scala.tools.nsc.typechecker.Typers $ Typer.body $ 2(Typers.scala:5557) 在scala.tools.nsc.typechecker.Typers $ Typer.typed(Typers.scala:5562) 在 scala.tools.nsc.typechecker.Typers $ Typer。$ anonfun $ typed1 $ 38(Typers.scala:4708) 在scala.tools.nsc.typechecker.Typers $ Typer.silent(Typers.scala:698) 在 scala.tools.nsc.typechecker.Typers $ Typer.normalTypedApply $ 1(Typers.scala:4710) 在 scala.tools.nsc.typechecker.Typers $ Typer.typedApply $ 1(Typers.scala:4757) 在 scala.tools.nsc.typechecker.Typers $ Typer.typedInAnyMode $ 1(Typers.scala:5530) 在scala.tools.nsc.typechecker.Typers $ Typer.typed1(Typers.scala:5547) 在scala.tools.nsc.transform.Erasure $ Eraser.typed1(Erasure.scala:773) 在 scala.tools.nsc.typechecker.Typers $ Typer.runTyper $ 1(Typers.scala:5584)
即使案例字段数的22个字段限制现在已经消失,但我遇到了一些实际的限制吗?
如果我没有使用Quill访问有问题的表/大型案例类,则会发生此编译错误。
感谢您的见解!
答案 0 :(得分:2)
如果您想调用一个实际的限制,那么您将碰到正在编译的JVM的最大堆栈大小。
如果要编译嵌套在异常深处或使用异常大的案例类的代码,则必须增加JVM的堆栈大小是正常的。通过将参数-Xss6m
传递给JVM,可以将最大堆栈大小设置为6MB。您可以尝试增加该数字,直到有效为止。