oraclejre中的Java线程stacksize参数效应

oraclejre中的Java线程stacksize参数效应,java,jvm,Java,Jvm,我正在研究Thread的stacksize参数,以处理一些递归,如我在另一个问题中所述: 说: 在某些平台上,为stackSize参数指定更高的值可能会允许线程在抛出StackOverflower错误之前获得更大的递归深度。类似地,指定较低的值可能会允许并发存在更多线程,而不会引发OutOfMemoryError(或其他内部错误)。stackSize参数值与最大递归深度和并发级别之间关系的细节取决于平台在某些平台上,stackSize参数的值可能没有任何影响。 有人有更多的细节吗?运行我的代码的

我正在研究
Thread
stacksize
参数,以处理一些递归,如我在另一个问题中所述:

说:

在某些平台上,为stackSize参数指定更高的值可能会允许线程在抛出StackOverflower错误之前获得更大的递归深度。类似地,指定较低的值可能会允许并发存在更多线程,而不会引发OutOfMemoryError(或其他内部错误)。stackSize参数值与最大递归深度和并发级别之间关系的细节取决于平台在某些平台上,stackSize参数的值可能没有任何影响。

有人有更多的细节吗?运行我的代码的服务器具有Oracle Java运行时环境。指定堆栈大小是否有效?我没有关于操作系统(或其他系统规格)的信息,我不能测试自己,因为我不能全年提交代码

Oracle Java运行时环境

这是不赞成的

指定堆栈大小是否有效

它会改变每个线程堆栈的大小,是的

这会影响你的应用程序吗?可能不会

如果你同时运行多个线程(我们说的至少是几百个),降低线程可能会产生效果(特别是,可能会使你的应用程序正常工作,而如果不这样做,你的应用程序就会出现内存不足错误,或者应用程序会变得像糖浆一样,因为你的系统没有RAM)

如果你有很深的递归堆栈,但不是永远运行的类型(由于代码中的错误),增加它可能会产生影响(特别是,可能会使你的应用程序工作,而如果不这样做,你的应用程序会因堆栈溢出错误而失败)

大多数java应用程序都没有,在这种情况下,-Xss选项可以正常工作,但您不会注意到。内存负载几乎没有变化。该应用程序继续以同样的速度工作

你的应用程序是否属于这两类中的一类?我们怎么能在看不到任何代码的情况下判断呢

大多数应用程序没有,这是。。。所有这些都是要说的,没有更多的细节


如果你只是想调整一下,让它“运行得更好”,不要这样做。默认设置为默认设置有一个原因:因为它们在大多数情况下工作得最好。除非您有大量信息(最好是由探查器报告备份),否则您不会调整默认值,这种调整是必要的。如果目标只是“让事情更顺利地运行”,我会从替换你已经过时(非常过时)的JRE开始。JRE作为一个概念已经不存在了(java8是最后一个拥有它的,现在已经有将近十年的历史了)-只需安装一个JDK。

是的,我有一个你描述的“异国情调”案例,请看我链接的100000个方法的问题是。。。很多情况下,通常只是将递归方法重写为循环,这通常非常简单。然而,100k并不是不可克服的,但它确实取决于方法调用使用了多少空间(java没有TCO,每个局部变量都需要堆栈)。我预计每次调用约80字节,因此需要8MB的堆栈。试一试这个用例和
-Xss10m
-很难知道您真正需要多少。您能证明您的Oracle Java Runtime Environment是不推荐的吗?提供了最新的JRE,没有任何不推荐的迹象。到目前为止,Oracle从未推荐过JRE。此外,它在2030年之前为Oracle JRE提供商业支持。许多其他供应商(Red Hat、Azul、Bellsoft、Amazon等)提供免费的JRE版本,并承诺至少在今后几年内提供更新。说JRE作为一个概念被弃用和消失是一个事实错误,与最初的问题无关。恐怕你对“弃用”的理解不太正确。您声称JRE 8已被弃用,任何文档都不支持这一说法。按照您的逻辑,HTTP/1.1是一个不推荐使用的标准,因为存在HTTP/2和HTTP/3。事实上,根据IETF,它既不是过时的,也不是不推荐的。在Java社区中,JCP决定哪些不推荐,哪些不推荐,JavaSE8状态为活动状态。