问题标签 [stack-size]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
597 浏览

java - 在 Eclipse 中增加 JUnit 测试的堆栈大小

我有一个问题,每当我尝试运行我的 JUnit 测试时,它们都会因为StackOverflowError. 我的问题是我有一个递归函数,它遍历一个非常大的图形以找到所有可能的路径。我还有一个递归计数器,它计算最深的递归是多少,并且大多数图表都位于 3000 到 4000 之间。当我运行 JUnit 测试StackOverflowError时,无论我设置什么 VM 参数,它总是恰好发生在 2300 处。

我已经尝试过-Xss1m-Xss10m无济于事,StackOverflowError仍然发生在相同的递归深度。我已经在互联网上搜索了一下,发现我还必须设置正在运行的 eclipse 应用程序的堆栈大小。所以我做了,但再次无济于事。

这里有一些我已经尝试设置堆栈大小的屏幕截图: 在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

有什么我错过的想法吗?

0 投票
0 回答
84 浏览

java - 为什么我的 stackSize 方法不起作用?

我的目标是提供一个类 Stacker,其中包含一个方法 stackSize,该方法以一个名为 extension 的 int 作为其参数。它应该返回最小的 long n,使得序列 1/2 + 1/4 + 1/6 + 1/8 + ... + ... + 1/2n 的总和大于或等于扩展。

假设我的 Rat 类(有理数)正确地将两个分数相加,使用第一个参数作为分子,第二个参数作为分母,有什么想法为什么这段代码对我不起作用?

默认的 Rat() 构造函数只生成有理数 (0/1),而 Rat(extension) 构造函数生成有理数 (extension/1)。

}

当我运行测试用例时:

它在给出 IllegalArgumentException 之前运行了 30 秒

这是 Rat 类的构造函数以及 add 方法

0 投票
4 回答
4211 浏览

java - 为什么我可以达到的最大递归深度是不确定的?

我决定尝试一些实验,看看我能发现堆栈帧的大小,以及当前执行的代码在堆栈中的距离。我们可能会在这里研究两个有趣的问题:

  1. 当前代码在堆栈深处有多少层?
  2. 当前方法在达到 a 之前可以达到多少级递归StackOverflowError

当前执行代码的堆栈深度

这是我能想到的最好的:

这似乎有点hacky。它生成并捕获异常,然后查看堆栈跟踪的长度。

不幸的是,它似乎也有一个致命的限制,即返回的堆栈跟踪的最大长度为 1024。超出此范围的任何内容都将被取消,因此此方法可以返回的最大值为 1024。

问题:

有没有更好的方法来做到这一点,它不是那么 hacky 并且没有这个限制?

对于它的价值,我的猜测是没有:Throwable.getStackTraceDepth()是本机调用,这表明(但没有证明)它不能在纯 Java 中完成。

确定我们还剩下多少递归深度

我们可以达到的层数将由(a)堆栈帧的大小和(b)剩余的堆栈数量决定。让我们不要担心堆栈帧的大小,只需看看在我们达到StackOverflowError.

这是我这样做的代码:

它的工作令人钦佩,即使它与剩余堆栈量成线性关系。但这是非常非常奇怪的部分。在 64 位 Java 7(OpenJDK 1.7.0_65)上,结果完全一致:9,923,在我的机器上(Ubuntu 14.04 64 位)。但是 Oracle 的 Java 8 (1.8.0_25) 给了我不确定的结果:我得到的记录深度在大约 18,500 到 20,700 之间。

现在为什么它会是非确定性的?应该有一个固定的堆栈大小,不是吗?所有的代码对我来说都是确定性的。

我想知道错误捕获是否有些奇怪,所以我尝试了这个:

显然,这将返回给定的输入,或者溢出。

同样,我得到的结果在 Java 8 上是不确定的。如果我调用badSum(14500),它将给我StackOverflowError大约一半的时间,而另一半则返回 14500。但在 Java 7 OpenJDK 上,它是一致的:badSum(9160)完成得很好,并且badSum(9161)溢出。

问题:

为什么 Oracle 的 Java 8 上的最大递归深度是不确定的?为什么它在 OpenJDK 7 上是确定性的?

0 投票
1 回答
278 浏览

java - 在 config.ini 文件中附加 -Xss64m 标志不起作用

我需要在 Eclipse 中更改我的 Java 项目的默认堆栈大小,以便通过在我创建的每个项目中将 -XssNUMm(例如 -Xss64m)标志附加到 VM 来手动更改,这可能每天很多。

我通过在 config.ini 文件中附加标志来读取它应该更改默认值但它不起作用。

我添加了 -Xss64m 标志并尝试运行程序并获取“线程中的异常”main“java.lang.StackOverflowError”。如果我手动将标志放在 runAs 或 debugAs 配置中,它可以完美地工作。

我使用的是 Windows 7 和 Eclipse 版本:Luna Service Release 1 (4.4.1)。

0 投票
2 回答
37208 浏览

c# - 为什么 C# 中的堆栈大小正好是 1 MB?

今天的 PC 有大量的物理 RAM,但 C# 的堆栈大小对于 32 位进程只有 1 MB,对于 64 位进程只有 4 MB(C# 中的堆栈容量)。

为什么 CLR 中的堆栈大小仍然如此有限?

为什么它正好是 1 MB (4 MB)(而不是 2 MB 或 512 KB)?为什么决定使用这些金额?

我对这个决定背后的考虑和原因很感兴趣。

0 投票
1 回答
1079 浏览

node.js - Maximum call stack size exceeded while uploading large file using dropbox nodejs api

I am running node server on ubuntu. i am using dropbox module in nodejs.(https://www.npmjs.com/package/dropbox)

I am using angularjs in front-end to upload file using (https://github.com/danialfarid/ng-file-upload) library. Uploading small files < 25mb works fine. It is uploading to the server and uploading to dropbox. But when file if larger like (50mb). It is giving error.

Here are relevant codes which i am using :

The Large files are uploading to the server but unable to upload on dropbox server. I did some research . Some suggested to use (https://nodejs.org/api/timers.html#timers_setimmediate_callback_arg). But how to implement. what is causing this problem? I also tried running app through node --stack-size=320000 app.js New error came after this ,

0 投票
1 回答
211 浏览

java - 堆栈大小验证和 StackOverflowError

在Java中,每个线程都会分配一些由-Xss参数定义的堆栈内存,并且有一些默认值。

现在,我通过运行以下代码来覆盖默认堆栈大小java -Xss1k Test

最后输出:

问题:

  • 为什么要打印 18479 之前的值?我期望的值要少得多,因为我提到了 1KB 的堆栈大小并且在每个堆栈帧上存储了一个 int。
  • 对于 1KB 或 1024 字节的堆栈大小,只能存储 256 (1024/4) 个 int 值。不?因为每次递归调用都会添加一个堆栈帧,并将 int 存储在上面。因此,一旦添加了 256 个每个大小为 4 字节的堆栈帧,就应该出现 StackOverflowError。
  • 我的理解是,全局作用域counter不会以任何方式对堆栈消耗做出贡献,因为它将存在于旧代空间中。确认?


0 投票
2 回答
1610 浏览

linux - 增加堆栈大小

我正在使用巨大的数组进行计算,对于其中一些计算,我需要增加堆栈大小!ulimit -s unlimited在我的 ~/.bashrc中将堆栈大小设置为无限制 ( ) 有什么缺点吗?

该程序是用 fortran(F77 & F90) 编写的,并与 MPI 并行化。我的一些阵列有超过 2E7 个条目,当我使用少量带有 MPI 的内核时,它会以segmentation fault.

数组大小在整个计算过程中保持不变,因此我将它们设置为固定值:

0 投票
1 回答
534 浏览

java - Hotspot JVM 的“Xss”选项是否设置了固定的“初始堆栈大小”或堆栈可以增长到的“最大堆栈大小”?

对于 Hotspot JVM,Xss选项是否设置了始终固定在此大小的初始堆栈大小?或者它是否设置了最大堆栈大小,以便堆栈最初以较小的大小开始,然后可以增长到设置的最大大小?

这种行为对于“堆大小”非常明显,其中“Xms”设置初始堆大小,“Xmx”设置最大堆大小。但是“Xss”选项对我来说似乎并不清楚。

注意:我浏览了Dynamicly expandable JVM stack的帖子,但我无法从该帖子中得到明确的答案。

0 投票
1 回答
1752 浏览

c# - 无法增加堆栈大小 Visual Studio 2013 C#

我正在使用 Visual Studio 2013 社区版编写 C# 项目。

我的程序使用 HtmlAgilityPack 解析 HTML 并引发堆栈溢出异常。我一直在尝试更改堆栈大小,但我看到的解决方案属性窗口只有屏幕截图中显示的选项:

缺少 Visual Studio 2013 配置属性

我读过其他一些文章,其中说 C# 项目的解决方案属性面板的可用选项与 C++ 不同。我在哪里可以配置我的 C# 程序的堆栈大小?