java - 在运行时减少 Java 中的最大堆栈大小

标签 java stack-overflow runtime

我正在尝试编写一个 junit 测试来防止一段代码陷入无休止的迭代,最终导致 StackOverflow。

所以我正在寻找一种在运行时减少堆栈大小的方法,以便 Junittest 失败得更快。

将最大堆栈设置为 jvm 参数是不可能的,因为该测试是更大测试套件的一部分。

最佳答案

您可以运行一个递归方法,它会自行运行给定的次数,然后执行给定的操作。虽然听起来很不稳定 :(

类似于:

public void eatStackThenExecute(int depth, Runnable action)
{
    // Maybe put some locals here (and use them) to eat more stack per iteration?
    if (depth == 0)
    {
        action();
    }
    else
    {
        eatStackThenExecute(depth - 1, action);
    }
}

编辑:智能 JVM 可能会在这里优化尾部调用,因此我们可能需要在递归调用之后做“某事”以阻止这种情况发生...

讨厌东西:(

关于java - 在运行时减少 Java 中的最大堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/980474/

相关文章:

JAVA根据线程转储中的ID查找对象

c++ - 为什么我在计算 Pascal 三角形的元素时在递归 C 程序中出现堆栈溢出错误?

android - 我确实需要帮助来理解运行时错误

java - 如何确定HashMap中方法的最坏情况复杂度?

xml - Android 新手 - 在运行时绘制 View

java - 使用文件系统作为数据集的接口(interface)

java - 如何从 sparkContext 中读取特定行

java - SQLiteBindORColumnindexoutofrange异常

java - 递归排序日期时出现 StackOverflowError

objective-c - 解读 Mac OS X 崩溃报告