增加堆栈空间,独立于机器 - Java

时间:2012-03-15 10:20:08

标签: java stack

我的算法需要使用比默认允许的更多堆栈空间。我是否必须增加每台机器上的堆栈空间,或者是否有办法将其包含在类中,以便它可以在每台机器上平稳运行。

2 个答案:

答案 0 :(得分:2)

后一种方法不起作用 - 堆栈空间是一个启动参数,用于为Java进程本身分配空间。

当一切都已设置为加载并执行类时,根据定义,该过程已经存在并且其堆栈大小已经确定。您无法在运行时修改Xss

通常你要做的就是分发一个启动脚本,用适当的内存参数启动你的应用程序。你的班级是如何被调用的?如果它是一个库,那么它是应用程序的作业,以确保分配足够的内存,可以说你可以在文档中列出它作为一个要求。

在极端情况下,你可以使用Process使用你想要的启动参数来生成一个全新的Java进程 - 但是这很容易出错,需要假设java在路径(或者说到处都存在相同的目录结构),你有权创建新进程,这个新进程有足够的内存/文件句柄等等。这不是我想做的事,但如果你筋疲力尽所有其他选项可能会让你感到困惑。

答案 1 :(得分:2)

堆栈大小是JVM配置,因此需要在运行的每台计算机上设置它。从Java内部无法做到这一点。

然而,听起来你应该专注于减少堆栈使用。简单的方法是专注于减少每个堆栈的大小,以及分配的帧数(即递归的深度)。更难但更强大的方法是使用在堆上分配的显式堆栈将递归转换为迭代。