java线程stacksize参数效应

f1tvaqid  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(252)

我在调查 stacksize 的参数 Thread 在我的另一个问题:如何在不访问jvm设置的情况下扩展堆栈大小?。
javadoc说:
在某些平台上,为stacksize参数指定更高的值可能会允许线程在抛出stackOverflower错误之前获得更大的递归深度。类似地,指定一个较低的值可以允许更多的线程同时存在,而不会抛出outofmemoryerror(或其他内部错误)。stacksize参数的值与最大递归深度和并发级别之间的关系的细节取决于平台。在某些平台上,stacksize参数的值可能没有任何影响。
有人知道更多的细节吗?运行我的代码的服务器具有oraclejava运行时环境。指定堆栈大小是否有效?我没有关于操作系统(或其他系统规范)的信息,我不能测试自己,因为我不能全年提交代码。

yhqotfr8

yhqotfr81#

oracle java运行时环境。
这是不赞成的。
指定堆栈大小是否有效?
它会改变每个线程堆栈的大小,是的。
这会影响你的应用程序吗?可能不会。
如果你同时运行多个线程(我们说的是至少几百个),降低它可能会有效果(特别是,可能会使你的应用程序工作,而如果不这样做,你的应用程序会失败,并出现内存不足的错误,或者应用程序会像糖浆一样,因为你的系统没有内存)。
如果你有很深的递归堆栈,但不是那种永远运行的堆栈(由于代码中的一个bug),增加它可能会有效果(特别是,可能会使你的应用程序工作,而如果不这样做,你的应用程序会因堆栈溢出错误而失败)。
大多数java应用程序都没有,在这种情况下,虽然-xss选项可以正常工作,但您不会注意到。记忆负荷几乎没有变化。这个应用程序继续以同样的速度工作。
你的应用程序属于这两个异国情调的类别之一吗?我们怎么能在看不到任何代码的情况下判断呢?
大多数应用程序没有,那是。。。所有这些都要说,没有更多的细节。
如果你只是想调整一些东西,让它“运行得更好”,不要这样做。默认设置是默认的,原因是:在大多数情况下,它们的效果最好。你不会调整默认值,除非你有很多信息,最好是由profiler报告备份,调整是必要的。如果目标只是“让事情更顺利地运行”,我会从替换你已经过时的(非常过时的)jre开始。jre作为一个概念已经不复存在了(java8是最后一个拥有它的版本,现在已经有将近十年的历史了)-只需安装一个jdk。

相关问题