问题标签 [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.
java - 在 Eclipse 中增加 JUnit 测试的堆栈大小
我有一个问题,每当我尝试运行我的 JUnit 测试时,它们都会因为StackOverflowError
. 我的问题是我有一个递归函数,它遍历一个非常大的图形以找到所有可能的路径。我还有一个递归计数器,它计算最深的递归是多少,并且大多数图表都位于 3000 到 4000 之间。当我运行 JUnit 测试StackOverflowError
时,无论我设置什么 VM 参数,它总是恰好发生在 2300 处。
我已经尝试过-Xss1m
但-Xss10m
无济于事,StackOverflowError
仍然发生在相同的递归深度。我已经在互联网上搜索了一下,发现我还必须设置正在运行的 eclipse 应用程序的堆栈大小。所以我做了,但再次无济于事。
这里有一些我已经尝试设置堆栈大小的屏幕截图:
有什么我错过的想法吗?
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 方法
java - 为什么我可以达到的最大递归深度是不确定的?
我决定尝试一些实验,看看我能发现堆栈帧的大小,以及当前执行的代码在堆栈中的距离。我们可能会在这里研究两个有趣的问题:
- 当前代码在堆栈深处有多少层?
- 当前方法在达到 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 上是确定性的?
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)。
c# - 为什么 C# 中的堆栈大小正好是 1 MB?
今天的 PC 有大量的物理 RAM,但 C# 的堆栈大小对于 32 位进程只有 1 MB,对于 64 位进程只有 4 MB(C# 中的堆栈容量)。
为什么 CLR 中的堆栈大小仍然如此有限?
为什么它正好是 1 MB (4 MB)(而不是 2 MB 或 512 KB)?为什么决定使用这些金额?
我对这个决定背后的考虑和原因很感兴趣。
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 ,
java - 堆栈大小验证和 StackOverflowError
在Java中,每个线程都会分配一些由-Xss
参数定义的堆栈内存,并且有一些默认值。
现在,我通过运行以下代码来覆盖默认堆栈大小java -Xss1k Test
。
最后输出:
问题:
- 为什么要打印 18479 之前的值?我期望的值要少得多,因为我提到了 1KB 的堆栈大小并且在每个堆栈帧上存储了一个 int。
- 对于 1KB 或 1024 字节的堆栈大小,只能存储 256 (1024/4) 个 int 值。不?因为每次递归调用都会添加一个堆栈帧,并将 int 存储在上面。因此,一旦添加了 256 个每个大小为 4 字节的堆栈帧,就应该出现 StackOverflowError。
- 我的理解是,全局作用域
counter
不会以任何方式对堆栈消耗做出贡献,因为它将存在于旧代空间中。确认?
linux - 增加堆栈大小
我正在使用巨大的数组进行计算,对于其中一些计算,我需要增加堆栈大小!ulimit -s unlimited
在我的 ~/.bashrc中将堆栈大小设置为无限制 ( ) 有什么缺点吗?
该程序是用 fortran(F77 & F90) 编写的,并与 MPI 并行化。我的一些阵列有超过 2E7 个条目,当我使用少量带有 MPI 的内核时,它会以segmentation fault
.
数组大小在整个计算过程中保持不变,因此我将它们设置为固定值:
java - Hotspot JVM 的“Xss”选项是否设置了固定的“初始堆栈大小”或堆栈可以增长到的“最大堆栈大小”?
对于 Hotspot JVM,Xss选项是否设置了始终固定在此大小的初始堆栈大小?或者它是否设置了最大堆栈大小,以便堆栈最初以较小的大小开始,然后可以增长到设置的最大大小?
这种行为对于“堆大小”非常明显,其中“Xms”设置初始堆大小,“Xmx”设置最大堆大小。但是“Xss”选项对我来说似乎并不清楚。
注意:我浏览了Dynamicly expandable JVM stack的帖子,但我无法从该帖子中得到明确的答案。
c# - 无法增加堆栈大小 Visual Studio 2013 C#
我正在使用 Visual Studio 2013 社区版编写 C# 项目。
我的程序使用 HtmlAgilityPack 解析 HTML 并引发堆栈溢出异常。我一直在尝试更改堆栈大小,但我看到的解决方案属性窗口只有屏幕截图中显示的选项:
我读过其他一些文章,其中说 C# 项目的解决方案属性面板的可用选项与 C++ 不同。我在哪里可以配置我的 C# 程序的堆栈大小?