以编程方式获取JVM的-Xss Max Stack Size Allocation值?

时间:2015-01-08 17:18:44

标签: java stack-overflow jvm-arguments

如果-Xss堆栈大小失败且StackOverflow错误,如果值设置为256k以下,我的应用程序将失败。不幸的是,在实例化一个非常大的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预设堆栈大小的方法。

1 个答案:

答案 0 :(得分:2)

尝试使用

RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
List<String> args = runtime.getInputArguments();

这应该为您提供在创建JVM时传递给JVM的参数。