既然22不再是限制,那么Scala案例类中允许的实际最大字段数是多少?

时间:2018-09-13 20:16:40

标签: scala quill.io

我有一个项目正在生成编译时堆栈溢出错误。

我正在使用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访问有问题的表/大型案例类,则会发生此编译错误。

感谢您的见解!

1 个答案:

答案 0 :(得分:2)

如果您想调用一个实际的限制,那么您将碰到正在编译的JVM的最大堆栈大小。 如果要编译嵌套在异常深处或使用异常大的案例类的代码,则必须增加JVM的堆栈大小是正常的。通过将参数-Xss6m传递给JVM,可以将最大堆栈大小设置为6MB。您可以尝试增加该数字,直到有效为止。