0

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

我正在使用 Quill 进行持久性,它使用宏。我有一个包含 600 多个字段的案例类,它代表一个数据库表。

在编译期间,我得到以下无限递归:

ervice.scala:27​​: UPDATE email_user SET password_hash = ? 在哪里 user_id = ?[info] .run(quote { [info] ^ java.lang.StackOverflowError at scala.tools.nsc.transform.Erasure$Eraser.adaptMember(Erasure.scala:686) at 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.$anonfun$typed1$38(Typers.scala:4708) 在 scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:698) 在 scala.tools.nsc.typechecker。打字机$打字机。

即使案例字段数量的 22 个字段限制现在已经消失,我是否遇到了一些实际限制?

如果我没有使用 Quill 访问有问题的表/大案例类,则会发生此编译错误。

感谢您的任何见解!

4

1 回答 1

2

如果您想将其称为实际限制,您将遇到正在编译的 JVM 的最大堆栈大小。如果要编译嵌套异常深的代码或使用异常大的案例类,则必须增加 JVM 的堆栈大小被认为是正常的。通过将参数传递-Xss6m给 JVM,您可以将最大堆栈大小设置为 6MB。您可以尝试增加该数字,直到它起作用。

于 2018-09-14T05:36:04.043 回答