当前位置: 首页 > 知识库问答 >
问题:

Stack=java.lang.StackOverflow错误:堆栈大小8MB

司马彦
2023-03-14

我得到了这个StackOverFlow错误,我完全理解,但问题是我不是在处理大数据,那么这个错误是怎么产生的呢?

我有一个活动,框架布局,一个片段,3个选项。

在片段中,当你点击其中一个选项时,它会重新创建片段并放入随机数,最大值是15,所以它没那么大,当用户快速点击导致溢出的选项时会发生此错误。

这是生成代码,关于“增强”它有什么想法吗?我不知道这段代码是否是一种不好的记忆使用方法。

private static List<Integer> SavedNumbers;

public static void SetupSavedNumbersLIst(){
    SavedNumbers = new ArrayList<>();
}


static List<Integer> range;
private static void AddDiff(int mMAX){
    range = new ArrayList<>();
    for(int i = 0 ; i < mMAX ; i++){
        range.add(i);
    }

    range.removeAll(SavedNumbers);
}

private static int ReturnIfDuplic(int mMAX){
    AddDiff(mMAX);
    return new Random().nextInt(range.size());
}


public static int ReturnUniqueSavedNumber(int mMAX){
    int Random = ReturnRandom(mMAX);
    if(SavedNumbers != null && SavedNumbers.size() > 0) {
        if(DoesSavedNumberExist(Random)){
            return ReturnIfDuplic(mMAX);
        } else {
            SavedNumbers.add(Random);
            return Random;
        }
    } else if (SavedNumbers != null && SavedNumbers.size() == 0){
        SavedNumbers.add(Random);
        return Random;
    } else if( SavedNumbers == null){
        SetupSavedNumbersLIst();
        return ReturnUniqueSavedNumber(mMAX);
    } else {
        return 1;
    }
}

private static boolean DoesSavedNumberExist(int Number){
    for(int s: SavedNumbers){
        if(Number == s)
            return true;
    }
    return false;
}

private static int ReturnRandom(int mMAX){
    return new Random().nextInt(mMAX);
}

共有3个答案

笪德华
2023-03-14

当我试图使用intent传递许多值时,我也遇到了同样的问题。putExtra()

我通过将所有数据保存在共享首选项中解决了这个问题。然后,您可以在后面的部分中访问应用程序中所需的任何片段或活动。

参考此问题了解有关使用共享首选项保存数据的更多信息。

方坚壁
2023-03-14

我遇到了同样的问题,堆栈大小为8MB。当我点击add item api时,也出现了同样的错误。我以为这是在从编辑文本中获取值时发生的。这样我就可以改变我的方式,在我的inIT()中获取值 服务呼叫前

inIT()  
sys = input_Systolic.getText().toString();
                dys = input_Diastolic.getText().toString();
                _date = dateView.getText().toString();
                tim = time.getText().toString();

改装电话

 HashMap<String, Object> pMap = new HashMap<>();
         pMap.put("user_id",loginStatusModal.getUser_id());
         pMap.put("relative_id",rel_id);
         pMap.put("systolic",sys);
         pMap.put("diastolic",dys);
         pMap.put("report_date",_date);
         pMap.put("report_time",tim);

通过使用它,我解决了堆栈大小8mb的错误。

燕实
2023-03-14

如果您碰巧随机选择了已保存的同一个数字,则该行将递归:

if(DoesSavedNumberExist(Random)){
    return ReturnUniqueSavedNumber(mMAX);
} 

如果已经保存了1-15,并且最大值为15,这将保证堆栈溢出,因为它永远不会满足If语句。这通常也是一种糟糕的“随机数不好,再试一次”方法,因为当你添加越来越多的数字时,你会添加越来越多的递归。一个更好的方法可能是将随机数用作剩下来选择的可能数的索引。

 类似资料:
  • 问题内容: 我正在使用Direct Web Remoting(DWR)JavaScript库文件,并且仅在Safari(台式机和iPad)中出现错误 它说 超出最大呼叫堆栈大小。 该错误的确切含义是什么,它会完全停止处理吗? 也适用于浏览器的所有修复程序(实际上在上, JS:执行超出超时 我假设是相同的调用堆栈问题) 问题答案: 这意味着在代码的某处,你正在调用一个函数,该函数又调用另一个函数,依

  • 问题内容: 我使用ASM库生成字节码,方法的“最大堆栈大小”将自动计算。在运行期间,我发现此值(最大堆栈大小)不正确。 我的源代码是: 上面的代码将生成字节码: 字节码报告错误: 因为构造方法:stack = 0,locals = 4,args_size = 4 正确的堆栈大小为2。 即使设置了ClassWriter(COMPUTE_MAX+COMPUTE_STACK),仍有另一个线程ASM(来自

  • 问题内容: 我正在运行一个用Java在Eclipse中编写的程序。对于很大的输入,该程序具有很深的递归级别。对于较小的输入,程序运行正常,但是在给出较大的输入时,出现以下错误: 可以通过增加Java堆栈大小来解决此问题,如果可以,那么如何在Eclipse中做到这一点? 更新: @乔恩·斯基特 该代码递归地遍历解析树以建立数据结构。因此,例如,代码将使用解析树中的一个节点来做一些工作,并在该节点的两

  • 索引.js Questionlist.jsx 问题.jsx Scorebox.jsx 结果. jsx

  • 我刚刚开始使用角度2。所以我尝试使用Web服务从数据库显示类别。 这是我的论坛.服务.ts文件 forum.component.ts: forum.component.html: 请帮忙,先谢了

  • 问题内容: 下面给出的代码显示了运行时的Stackoverflow错误。但是,如果我使另一个类CarChange创建Car的对象,它将成功运行。我是一个初学者,请执行以下代码以了解在Java中进行向上转换的重要性。 问题答案: 一个stackoverflow通常意味着您有一个无限循环。 收到此消息的原因是因为您从testdrive方法调用驱动器,并且在该方法中再次调用drive。