哪些场景会导致需要增加Java JVM的堆栈大小?

哪些场景会导致需要增加Java JVM的堆栈大小?,java,memory,jvm,stack,Java,Memory,Jvm,Stack,我今天才知道可以在Java JVM中设置堆栈内存的大小。现在我想知道的是,你什么时候会需要这样做 我想不出有什么具体的例子需要这样做。只有当我在代码中塞满了一些东西时,我才得到StackOverflowException,比如无限递归或其他东西。设置堆栈大小并不一定意味着增加堆栈大小。;-) 如果有很深的递归,可能需要增加堆栈大小 如果在32位JVM上运行并且有大量线程,则可能需要减小堆栈大小。每个线程都有一个单独的堆栈,它占用地址空间,而地址空间是一种稀缺资源。即使不是无限的,也有可能从太深的

我今天才知道可以在Java JVM中设置堆栈内存的大小。现在我想知道的是,你什么时候会需要这样做


我想不出有什么具体的例子需要这样做。只有当我在代码中塞满了一些东西时,我才得到StackOverflowException,比如无限递归或其他东西。

设置堆栈大小并不一定意味着增加堆栈大小。;-)

如果有很深的递归,可能需要增加堆栈大小


如果在32位JVM上运行并且有大量线程,则可能需要减小堆栈大小。每个线程都有一个单独的堆栈,它占用地址空间,而地址空间是一种稀缺资源。

即使不是无限的,也有可能从太深的递归中得到SOE——这在Java这样的语言中是相对罕见的,因为人们不倾向于将其用于深度递归,但这是可能发生的。一般来说,如果你需要一个非常大的堆栈,那么你可能已经把设计搞砸了。+1 JVM没有进行尾部调用优化,这意味着它可能需要比其他语言中的相同算法更深的堆栈。我有一个后续问题-有没有一个工具可以让我可视化JVM的当前状态?比如,我可以看看当前存在哪些线程,它们分配了多少堆栈内存,堆是什么样子,类加载器中有什么吗?@cookiemonster一些细节(例如关于当前线程的信息)可以通过jVisualVM(在jdk/bin目录中)获得,但不是你提到的所有内容。例如,它只告诉你哪些线程正在运行,但没有告诉你它们的堆栈大小(尽管你可能会得到这些信息),它告诉你加载了多少类,但不能列出所有类(可能有几千个…)@CookieMonester:为什么不把后续问题作为一个单独的问题发布?