我正在阅读一篇关于在Java(和JBoss平台)处理内存溢出错误条件的文章,并看到了这个建议:减少线程堆栈的大小。
减少线程堆栈的大小如何帮助解决最大内存错误条件?
我正在阅读一篇关于在Java(和JBoss平台)处理内存溢出错误条件的文章,并看到了这个建议:减少线程堆栈的大小。
减少线程堆栈的大小如何帮助解决最大内存错误条件?
一个进程中有N个线程,每个线程栈分配M字节的内存。栈使用的总内存为N x M。
您可以通过减少线程数(N)或减少分配给每个线程的内存(M)来减少栈消耗的总内存。
通常,线程不会使用栈的所有空间。它是预先分配的,以防万一以后可能需要,但如果线程不使用深度调用路径或不使用递归,则可能不需要分配给其栈的所有空间。
找到最佳的栈大小可能需要一些技巧。
在尝试更改线程堆栈大小之前,我建议您尝试其他方法(例如更改生存者比率或为类定义分配的空间大小)。由于很难正确设置线程堆栈大小,因此很容易出现堆栈溢出错误(这与内存不足错误一样致命)。
即使经过仔细检查,我也从未正确地设置过线程堆栈大小。但是,换句话说,我可能从未遇到过可以通过更改其线程堆栈大小来微调的Web应用程序/容器组合。我在修改生存者比率方面取得了更好的结果,而且这不会导致致命错误。但这是基于我的工作经验。在不同的工作场所和应用程序中,情况可能有所不同。