我在Play for Scala应用服务器中使用HSQLDB
嵌入式内存。
我像这样配置驱动程序:
driver = org.hsqldb.jdbc.JDBCDriver
url = "jdbc:hsqldb:mem:inmemory"
此外,当Play重新启动时,我会在SHUTDOWN
连接中发出HSQLDB
声明。
这似乎工作正常,但是当我在开发环境中重启Play大约20次时,我得到以下内存不足异常。 HDBSQL是否正确关闭?也许数据库已关闭,但引擎内存本身未发布?
java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError: 元空间 at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192)引起:java.lang.OutOfMemoryError:Metaspace at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 在java.net.URLClassLoader.access $ 100(URLClassLoader.java:73) 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:368) 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:362) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:361) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 在java.net.URLClassLoader.access $ 100(URLClassLoader.java:73) 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:368) 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:362) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:361) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在scala.collection.Iterator $ class.toStream(Iterator.scala:1181) 在scala.collection.AbstractIterator.toStream(Iterator.scala:1194) 在scala.collection.TraversableOnce $ class.toSeq(TraversableOnce.scala:296) 在scala.collection.AbstractIterator.toSeq(Iterator.scala:1194) 在scala.tools.nsc.backend.jvm.GenASM $ newNormal $ .computeDetour $ 1(GenASM.scala:3094) 在scala.tools.nsc.backend.jvm.GenASM $ newNormal $ .collapseJumpOnlyBlocks(GenASM.scala:3126) 在scala.tools.nsc.backend.jvm.GenASM $ newNormal $ .normalize(GenASM.scala:3195) 在scala.tools.nsc.backend.jvm.GenASM $ JPlainBuilder.genCode(GenASM.scala:1861) 在scala.tools.nsc.backend.jvm.GenASM $ JPlainBuilder.genMethod(GenASM.scala:1467) 在scala.tools.nsc.backend.jvm.GenASM $ JPlainBuilder.genClass(GenASM.scala:1337)
答案 0 :(得分:0)
HSQLDB有一种在最后一个连接关闭时自动关闭数据库的方法。您需要添加shutdown=true
作为网址属性:
url = "jdbc:hsqldb:mem:inmemory;shutdown=true"
在文档中查看更多详细信息:
http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html#N15641