如何在每个线程的基础上限制 Java 的堆栈大小?

Posted

技术标签:

【中文标题】如何在每个线程的基础上限制 Java 的堆栈大小?【英文标题】:How to limit Java's stack size on a per-thread basis? 【发布时间】:2020-02-09 01:19:08 【问题描述】:

标题问了一切,真的。如果无法直接在 JVM 中设置单个线程的堆栈大小,是否有替代方案?

【问题讨论】:

@AndyTurner “任何替代方案”,例如模拟堆栈大小上限的方法,例如使用工具或监视堆栈,并在它变得太大时使用Thread.stop...最好不要那样,因为@987654322 @ 已弃用。如果您被提及两次,我们深表歉意。 【参考方案1】:

Use the docs:

public Thread(ThreadGroup group,
              Runnable target,
              String name,
              long stackSize)

...

stackSize - 新线程所需的堆栈大小,或者为零 表示该参数将被忽略。

正如Jacob G. 所指出的,它在同一文档中说(带有原始重点):

在某些平台上,stackSize 参数的值可能没有任何作用。

【讨论】:

链接文档中的小注释:“在某些平台上,stackSize 参数的值可能没有任何影响。”

以上是关于如何在每个线程的基础上限制 Java 的堆栈大小?的主要内容,如果未能解决你的问题,请参考以下文章

Python递归限制与堆栈大小?

如何排空java线程栈内存区?

linux 设置堆栈大小 为无限制

java 每个函数的栈空间大小是?

JAVA线程问题

CLR 强制执行的 1 MB 堆栈大小限制是针对线程还是整个应用程序/进程?