java - 以编程方式获取 JVM 的 -Xss 最大堆栈大小分配值?

标签 java stack-overflow jvm-arguments

如果该值设置为低于 256k-Xss 堆栈大小将失败并出现 StackOverflow 错误,我的应用程序将会失败。不幸的是,在实例化非常大的 XSD validator 时,这是与库 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 预设堆栈大小的方法。

最佳答案

尝试使用

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

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

关于java - 以编程方式获取 JVM 的 -Xss 最大堆栈大小分配值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27845914/

相关文章:

Java Flight Recorder 命令参数以启用对象统计信息的收集

java - 如何在java程序中设置JVM参数值

c# - 通过 LinkedList.Enumerator 替换 LinkedList 元素值

java - 如何使用 MockMvcResultMatchers.jsonPath

java - 如何让我的应用程序像 Google map 一样接收位置 Intent

java - 不工作 ccs 样式 javafx -fx-strikethrough

.net - IIS应用程序池随机崩溃是由堆栈溢出引起的

c - 堆栈溢出 C 变量位置

java - 如何让 PSOldGen 扩展以容纳非常大的对象?

php - Eclipse - 堆栈溢出错误