英文:
Java Recursive Stack Size
问题
每当我尝试通过Java中的递归来解决一些问题时,我会遇到栈溢出的问题。我已经检查了我的实现,但它们是正确的。而当相同的代码以相同逻辑写在**C++**中时,它可以正常运行。
Java和C++中是否有特定的递归栈大小?
如果有,它们是如何工作的,以及限制是多少?
英文:
Whenever I try to solve some problems, through recursion in Java, I get StackOverflow. I have checked my implementation but they are right. And when the same code is written in C++ with the same logic, it runs perfectly fine.
Is there a specific recursive stack size in Java and C++??
If yes, how does that work and what is the limit?
答案1
得分: 1
栈大小实际上是Java虚拟机使用的栈大小。因此,这是一个实现细节。可以经常控制可用的栈空间。对于标准的Java虚拟机,可以使用-Xss
设置来控制栈大小,其中X基本上表示它是特定于该特定Java版本的(即可能会保留,但不提供保证)。有关更多详细信息,请参阅Java文档,正如您所见,它在Java 19中仍然存在。
请注意,这将增加每个线程的栈大小,因此请谨慎使用。例如,您可以尝试将其增加到4MB,方法是执行java -Xss4M ...
。通常,应用程序(如Tomcat)允许您通过配置文件或类似的方式来定义这些设置。
我个人不太喜欢深度递归函数,更喜欢使用其他方法(循环、Lambda等)来实现相同的功能。栈操作很昂贵,内存耗尽的问题仍然非常真实,因为它取决于输入而不是应用程序代码本身。
英文:
The stack size is actually the stack size as used by the Java VM. As such it is an implementation detail. How much stack space is available can often be controlled. For the standard Java VM that's the -Xss
setting, where X basically means that it is specific to that particular Java version (i.e. it may be retained, but no assurance is given). See the Java documentation for more details, as you can see it is still present in Java 19.
Note that this will increase the stack size for each thread, so use with some care. You can e.g. try and increase it to 4 MB by performing java -Xss4M ...
. Usually applications such as Tomcat allow you to define these kind of settings through a configuration file or something similar.
I'm myself not a big fan of deeply recursive functions, and prefer to use other methodologies (looping, lambda's etc.) to achieve the same. Stack ops are expensive and the issue of running out of memory remains very real as it is dependent on the input rather than the application code itself.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论