整个Xss(堆栈空间)是否用于每个Java线程?

Bry*_*eld 7 java regex stack

我正在考虑增加堆栈大小以解决正则表达式库引发StackOverflowError问题,该问题似乎不在修复计划中.

编辑:解决方案

  • 斯蒂芬C的答案可能是问题的最佳答案,即使它不是问题的答案.虽然我的字符串大小已经超过4k,但在产品的生命周期中我仍然可能最终再次遇到问题
  • aioobe的答案是对实际问题的最佳答案,也许不是实际问题.
  • 克里斯的回答是个好主意.编辑: JRegex工作得很好!

aio*_*obe 5

整个Xss(堆栈空间)是否用于每个Java线程?

根据这个页面,是的:

  • 通过在Java命令行中包含-Xssnnm来增加应用程序中所有线程的堆栈大小(其中nn是每个线程的堆栈空间的兆字节数);

但是,您可以使用Thread(ThreadGroup group, Runnable target, String name, long stackSize)构造函数为特定线程选择更大的堆栈大小.

分配一个新的Thread对象,使其具有target作为其运行对象,具有指定的名称作为其名称,属于group引用的线程组,并具有指定的堆栈大小.

但请注意(根据文档)stackSize参数的效果(如果有)与平台高度相关,并且stackSize参数的值可能在某些平台上无任何影响.


Ste*_*n C 2

我认为更好的解决方案是重写正则表达式以避免出现问题。或者更好的是,用一些简单的 Java 解析代码替换它。或者可能只是拒绝大于特定长度的字符串。

增加堆栈大小只会推迟问题的发生。现在您可以处理 2000 或 4000 个字符的输入字符串,而不是 1000 个。但是迟早您可能会遇到导致扩展堆栈溢出的情况。