gpt4 book ai didi

scala - 重新创建 Squeryl 内存数据库时出现内存泄漏

转载 作者:行者123 更新时间:2023-12-02 01:50:54 25 4
gpt4 key购买 nike

我正在编写一个简单的 Scala 和 Squeryl 应用程序。出于测试目的,每次我在 sbt 中运行“test”时,都会创建一个内存中的 H2 数据库并填充测试数据。每次运行后,我可以看到任务管理器中 java.exe(其中运行 sbt)的内存使用量增加,直到运行 4 或 5 次后,它因 OutOfMemoryError 崩溃。我是否缺少一些显式释放 H2 或 Squeryl 使用的内存的东西?到目前为止,我仅使用 Session.createPersistence.create。这是我的代码的摘录:

object Persistence extends Schema {
val documents = table[IncomeEntity]
val positions = table[Position]
val documentToPositions = oneToManyRelation(documents, positions).via(_.id === _.id_income)
}

class PersistenceTests extends FunSuite with BeforeAndAfterAll {

override protected def beforeAll() {
Class.forName("org.h2.Driver")
SessionFactory.concreteFactory = Some(
() => Session.create(DriverManager.getConnection("jdbc:h2:mem:test"), new H2Adapter)
)
}

test("DDL") {
transaction {
Persistence.create
assert(Persistence.documents.size == 0)
assert(Persistence.positions.size == 0)
}
}

test("Insert") {
transaction {
Persistence.create
(1 to 100) map { _ => IncomeMapper.save(new Income) }
assert(Persistence.documents.size == 100)
}
}
}

我收到的消息如下:

[info] PersistenceTests:
sbt appears to be exiting abnormally.
The log file for this session is at C:\Users\Oleg\AppData\Local\Temp\sbt7320472784033855835.log
java.lang.OutOfMemoryError: PermGen space
Error during sbt execution: java.lang.OutOfMemoryError: PermGen space

最佳答案

将以下标志添加到您的 SBT 启动脚本中:-XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m。这应该可以解决这个问题。

更新:如果 JVM 仍然崩溃,请查看 SBT-revolver + JRebel:https://github.com/spray/sbt-revolver 。它将在 fork 的 JVM 中启动您的应用程序,因此您的 SBT 永远不会崩溃。

关于scala - 重新创建 Squeryl 内存数据库时出现内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9554811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com