unity工程运行一段时间堆栈溢出,unity崩溃fatal error in GC. stack overflow

2023-11-17

– 在这里做一下标记,困扰了我一天的难题,就是栈溢出导致软件奔溃的问题,gc报错,堆栈溢出.代码问题,没有指出具体溢出位置,需要自己慢慢排查.(多个个脚本大量的代码排查起来很艰难,首先要抓住的重点位置: 1.使用whiletrue的地方 2.使用递归的地方 3.在updata里不断实例化,new对象的地方. 4.updata里有数组list的地方 5.使用for循环赋值的地方(循环长度和赋值长度不一致时会导致for循环变成死循环,出现栈溢出))

导致堆栈溢出的原因:

一、局部数组过大。当函数内部的数组过大时,有可能导致堆栈溢出。
二、递归调用层次太多。递归函数在运行时会执行压栈操作,当压栈次数太多时,也会导致堆栈溢出。
三、指针或数组越界。这种情况最常见,例如进行字符串拷贝,或处理用户输入等等。

问题出现的地方:

我的工程里用到了udp的连接,数据传输.以及传输对于服务器返回的json字符串的解析,并使用了list接收解析的数组.并且使用了断网重连的机制,不断的inint初始化连接.

  • 我认为导致堆栈溢出的原因就是在于updata里面不断的初始化连接服务器,因为在udp连接服务器传输的方法里面有个whiletrue方法,不断的接收发送来的消息,并且还有一个new对象,新建一个线程.防止阻塞.
  • 1.当这两个方法都处在update的方法里不断的执行时,会导致在循环里不断的new新的对象,新建线程
  • 2.当while true方法在update里运行时会不断的重复方法,形成死循环.导致栈溢出.
  • 3.还有一点,在updata里不断的new list数组对象,导致大量的对象被新建,容易导致栈溢出.
我的解决办法:
  • 1.把updata里重连服务器的方法( inint() )放在了外面,因为该方法里面包括了whiletrue方法,并且还有一个new 线程的方法,如果一直在updata里执行,会出现嵌套死循环,以及大量线程.
  • 2.把updata里数new list的数组在方法的结束,进行了清空,list.clear(),或者list=null;l两者的区别:clear后该list还存在,null后不存在,被gc回收.个人建议设为null.就算在updata里不断的new出来,也会提醒后台gc及时的对该list进行回收.

总结

  • 1.对于数组,注意for循环的长度和数组的长度是否一致,如果不一致,很容易导致堆栈异常.
  • 2.死循环,对于死循环的使用要注意,比如递归的使用,容易堆栈溢出.更要注意嵌套的死循环,很容易堆栈溢出.在我的工程里我猜测时因为在updata里不断的执行死循环导致的.
  • 3.注意在for循环或者updata里出现不断的new对象,大量的对象被new出来后不确定被及时回收,在for循环结束之后要注意对于数组的清空,list.clear(),或者list=null.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity工程运行一段时间堆栈溢出,unity崩溃fatal error in GC. stack overflow 的相关文章

  • 互联网公司MySQL数据库采用读已提交的隔离级别原因

    开始我们的内容 相信大家一定遇到过下面的一个面试场景 面试官 讲讲mysql有几个事务隔离级别 你 读未提交 读已提交 可重复读 串行化四个 默认是可重复读 面试官 为什么mysql选可重复读作为默认的隔离级别 你面露苦色 不知如何回答 面
  • SAR ADC基本原理学习

    今天我们来学习SAR ADC喽 逐次逼近寄存器型模数转换器 Successive Approximation Analog to Digital Converter 是一种常用的A D转换结构 其较低的功耗表现 还不错的转换速率 在有低功耗
  • Shiro错误之No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util

    提示 No SecurityManager accessible to the calling code either bound to the org apache shiro util ThreadContext or as a vm
  • [深度学习] 模型集成方法

    模型集成方法 集成学习 ensemble learning 是机器学习中一类学习算法 值训练多个学习器并将它们组合起来使用的方法 这类算法通常在实践中会取得比单个学习器更好的预测结果 数据层面的集成方法 在训练阶段的数据扩充在测试阶段仍然使
  • ERROR:unable to read the cmd header on the pmi context, Error = -1

    win7 vs2010 MPI 以下仅在单机下做的测试 电脑之前装了MPICH2和Microsoft HPC Pack 2008 SDK 用vs2010链接MPICH2的库编译了一个小程序 在cmd下用mpiexec执行该程序时出现下面问题
  • linux——ifcfg-ens33文件参数解释

    早上在用ifconfig命令的时候得到的IP是192 168 137 132 但是看ifcfg ens33文件里面IP配置的是192 168 137 129 通过请教大神和百度得知 是与ifcfg ens33文件配置有关系 BOOTPROT
  • 2021年蓝桥杯A组省赛-左children右sibling

    CXXX有毛病 左孩子右兄弟 字眼很敏感吗 题目 题目链接 题解 贪心 DFS 以 u u u 为根的子树选择包含节点最多的以 v v v 为根的子树作为最后连接的右兄弟能保证树向下延展的最多 所以重点转换为了计算以
  • 二分特训上------刷题部分----Week4(附带LeetCode特训)

    二分特训上 理论部分 Week4 附带LeetCode特训 小杰312的博客 CSDN博客 如果需要理论 请移步上一篇 注意 我们把 0000001111111模型中 0称呼为左边区间 1称呼为右边区间 答案第一个1在右区间 1111100
  • 模拟器检测

    往期推荐 文件检测 签名验证 资源文件混淆 apk保护策略 Java代码混淆 模拟器检测的就是指通过检测确认软件 手游等不能运行在模拟器上面 比如一个游戏 它能够在模拟器上实现批量刷金币或者是其他功能 但模拟器又无法启动起来 在这种情况下
  • WPF CommunityToolkit.Mvvm

    文章目录 前言 Toolkit Nuget安装 简单使用 SetProperty 通知更新 RealyCommand CanExecute 新功能 代码生成器 ObservableProperty NotifyCanExecuteChang
  • eclipse的下载及安装教程

    第一步 从官网下载eclipse 进行安装 下载链接https www eclipse org downloads packages 根据自己的电脑和需求去选择对应的版本 点击download 进行下载 然后会跳转到一个打赏页面 无需理会
  • You must set CMAKE_CUDA_ARCHITECTURES to e.g. ‘native‘, ‘all-major‘, ‘70‘,

    You must set CMAKE CUDA ARCHITECTURES to e g native all major 70 cmake 报错 CMake Error at CMakeLists txt 255 message You
  • Python并发编程之多线程

    前言 本文介绍并发编程中另一个重要的知识 线程 线程介绍 我们知道一个程序的运行过程是一个进程 在操作系统中每个进程都有一个地址空间 而且每个进程默认有一个控制线程 打个比方 在一个车间中有很多原材料通过流水线加工产品 而线程就是这个车间中
  • 小程序代码体积优化

    微信小程序在发布的时候 对提交的代码有 2 MB 大小的限制 开发之前就需要提前有个心理准备 由于我也是第一次做小程序开发代码大小就超过了2MB 开发者工具都无法预览了 这就很尴尬了 我自己的优化代码积的方式也不多 如果你有更好的方法 可以
  • linux分区满了,如何进行扩容

    图片中可以看到挂载点 的利用率移到100 空间不够 所以要对其进行分区 1 先进入虚拟机设置里增大磁盘空间 注意 将25改成50 以扩大空间 这里一定要写比25大的数 因为他是 增加到 50GB 而不是 增加了25GB 2 下图可以看到 硬
  • 统计学习方法(九)EM算法

    参考博客 https www cnblogs com bigmoyan p 4550375 html https en wikipedia org wiki Expectation E2 80 93maximization algorith
  • 【网络编程】协议定制+Json序列化与反序列化

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 序列化与反序列化的概念 二 自定义协议设计一个网络计算
  • 软件测试重点

    第1章 软件测试概述 什么是软件测试 广义的概念 指软件生存周期中所有的检查 评审和确认工作 其中包括了对分析 设计阶段 以及完成开发后维护阶段的各类文档 代码的审查和确认 狭义概念 识别软件缺陷的过程 即实际结果与预期结果的不一致 软件测
  • 二项分布和泊松分布,二者的关系

    离散型随机变量中 经典的两个分布为二项分布和泊松分布 二项分布的定义 泊松分布的定义 注意 一 对泊松分布定义的右边式子 对k 0 1 2 求和的结果为1 即所有事件的概率之和为1 这可以从我们熟知的公式 e k 0 kk begin eq
  • 毕业设计-基于深度学习的人脸识别方法

    目录 前言 课题背景和意义 实现技术思路 一 人脸识别介绍 二 基于深度学习的人脸识别方法 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各

随机推荐