【发布时间】:2015-01-08 17:18:43
【问题描述】:
如果-Xss 堆栈大小设置为低于256k,我有一个应用程序将失败并出现StackOverflow 错误。不幸的是,当实例化一个非常大的 XSD 验证器时,这与库 com.sun.org.apache.xerces 相关。
目前,-Xss192k 的预定义值是我们在某些环境中一直使用的值,并且知道这是导致问题的原因。
出于日志记录的目的,我想知道是否可以通过 Java 本身获取最大堆栈大小,并在初始化时抛出一个错误,表明提供的堆栈大小不足,而不是部署应用程序,然后尝试使用此进程的堆栈,并因此溢出?
日志中当前的StackOverflowError 对于调试目的而言相对缺乏信息,而且我知道捕获错误是不好的编程礼仪。
具体来说,我想做的是,在伪代码中:
if(jvm.getMaxStackSize() < "256k") {
throw new Exception("Insufficient Stack Size for this application. Please set to 256k or more.");
} //stop program from continuing because the stack size will result in a stackoverflow if set too low
相关帖子Can one obtain actual stack size used by a thread in Java after some time of running? 提供了有关如何在运行时监控堆栈大小的信息,但我没有看到获取 JVM 预设堆栈大小的方法。
【问题讨论】:
标签: java stack-overflow jvm-arguments