在我的一个程序中,我想捕获所有异常并显式地打印它们(以便能够在仍然看到异常的情况下继续进行finally)。因此,我尝试了以下代码:但是使用getStackTrace会导致"java.lang.OutOfMemoryError: PermGen space"错误。我做错了什么?我确定在获取这个错误之前我有足够的JVM堆内存可用(因为我已经尝试在程序的开头引发异常)。
我认为你应该发布一个精确的、独立的工作示例,因为这对我来说在使用2.8.0时完全没有内存问题:
scala> def foo( f : () => Unit) : Unit = try {
| f()
| } catch { case e : Exception => println("H" + e.getStackTrace) }
foo: (f: () => Unit)Unit
scala> foo(() => throw new NullPointerException)
H[Ljava.lang.StackTraceElement;@30a4effe
我想知道你是否有一个异常它是自己的原因
?相反地,你的程序可能正在非常低的内存(顺便说一下,32Mb是客户端机器上的默认值),并且您拥有非常深的堆栈(在scala-land中很常见!)
看起来你需要分配更多的permgen空间。在Java中,你可以使用JVM参数来实现:
-XX:MaxPermGen=256m
您可以通过设置环境变量来设置Scala使用的JVM参数:
JAVA_OPTS="-XX:MaxPermGen=256m"
try
代码块中抛出了什么类型的异常? - Fred Foo