unity GC机制简单介绍

2023-11-14

GC全称是garbage collection,即垃圾回收,顾名思义就是一种释放内存垃圾的机制。这种机制主要作用在堆空间上。

堆上的变量在存储的时候,主要分为以下几步:

1)首先,unity检测是否有足够的闲置内存单元用来存储数据,如果有,则分配对应大小的内存单元;

2)如果没有足够的存储单元,unity会触发垃圾回收来释放不再被使用的堆内存。这步操作是一步缓慢的操作,如果垃圾回收后有足够大小的内存单元,则进行内存分配。

3)如果垃圾回收后并没有足够的内存单元,则unity会扩展堆内存的大小,这步操作会很缓慢,然后分配对应大小的内存单元给变量。

垃圾回收时的操作

当堆内存上一个变量不再处于激活状态的时候,其所占用的内存并不会立刻被回收,不再使用的内存只会在GC的时候才会被回收。

每次运行GC的时候,主要进行下面的操作:

1)GC会检查堆内存上的每个存储变量;

2)对每个变量会检测其引用是否处于激活状态;

3)如果变量的引用不再处于激活状态,则会被标记为可回收;

4)被标记的变量会被移除,其所占有的内存会被回收到堆内存上。

何时会触发垃圾回收

主要有三个操作会触发垃圾回收:

1) 在堆内存上进行内存分配操作而内存不够的时候都会触发垃圾回收来利用闲置的内存;

2) GC会自动的触发,不同平台运行频率不一样;

3) GC可以被强制执行。

降低GC的几种方法:

1.使用对象池

对象池,顾名思义就是一定数量的已经创建好的对象(Object)的集合。当需要创建对象时,先在池子中获取,如果池子中没有符合条件的对象,再进行创建新对象,同样,当对象需要销毁时,不做真正的销毁,而是将其setActive(false),并存入池子中。这样就避免了大量对象的创建。

2.string和StringBuilder的使用

对于执行大量字符串操作的例程 (例如在循环中多次修改字符串的应用程序) ,重复修改字符串可能会显著降低性能。 替代方法是使用 StringBuilder ,它是一个可变字符串类。 可变性是指在创建类的实例后,可以通过追加、移除、替换或插入字符来修改它。 StringBuilder对象维护缓冲区以容纳对字符串的扩展。 如果空间可用,则会将新数据追加到缓冲区;否则,将分配一个新的更大的缓冲区,将原始缓冲区中的数据复制到新缓冲区,然后将新数据追加到新缓冲区。

3.减少装箱操作

装箱指的是值类型转换成引用类型,拆箱则是反过来。

 装箱和取消装箱过程需要进行大量的计算。 对值类型进行装箱时,必须创建一个全新的对象。 这可能比一些简单的引用赋值耗时最多能长 20 倍。 取消装箱的过程所需时间也可达赋值操作的四倍,所以尽量避免装箱和拆箱。

4.关键帧限制协程调用(startcoroutine()实际上是new一个对象)

5.用for代替foreach(5.5版本以前有装箱操作,会在堆内存上产生一个system.object)

6.struct中不要有引用类型变量(struct是值类型,而如果struct中有引用类型的变量,GC会检查整个struct)【增加GC的方式是让它检查不必检查的对象】

7.主动调用GC

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity GC机制简单介绍 的相关文章

  • Unity用Vuforia做AR实现脱卡效果

    有时在识别目标丢失后我们仍希望虚拟物体能够出现在摄像机前 或者到一个特定的位置 我们能对其进行操作 这就是脱卡功能 自带的脱卡功能应该是ExtendedTracking 允许模型在识别图丢失的时候还存在 位置不变 在丢失的时候的位置 这样也
  • using UnityEditor引用注意事项

    本文转载自http blog csdn net czlilove article details 19979725 在运行时脚本中使用UnityEditor命名空间 假如该脚本被挂在场景中的物体上 那么 可以这样做 在Unity编辑器中运行
  • Unity 安卓打包

    Unity打包的方式有很多种 自动打包和手动打包 今天小弟就鼓捣鼓捣unity手动打包 如果想动态打包的话 可以去看其他大佬的帖帖哈 unity打包先配置环境 下载unity的时候可以顺道把unity的安卓包下载下来 如果忘了也没事 可以从
  • c#获取cpu序列号

  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • Unity保存图片到相册

    Unity保存图片到Android相册 Java 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  • unity3d 自定义的图片无法放入source image中

    须将图片的texture type改为 sprite
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge

随机推荐

  • /etc/vsftpd.conf详解

    匿名权限控制 anonymous enable YES 是否启用匿名用户no anon password YES 匿名用户login时不询问口令下面这四个主要语句控制这文件和文件夹的上传 下载 创建 删除和重命名 anon upload e
  • 4399笔试题

    1 冒泡排序的时间复杂度 2 有无序数字5000个 用什么算法能快速的找出最大的前50个数字 3 比如有10个台阶 一直青蛙一次只能跳一个或者二个台阶 问青蛙从第一个台阶开始跳最多有几种跳法 4 从区间 2 2 中随意取出二个实数 它们的和
  • 解析顶点着色器和片元着色器

    管线 也称渲染管线 因为 OpenGL ES在渲染处理过程中会顺序执行一系列操作 这一系列相关的处理阶段就被称为OpenGL ES 渲染管线 OpenGL ES 渲染过程就如流水线作业一样 这样的实现极大地提高了渲染的效率 如图就是 Ope
  • C/C++遍历文件夹下所有文件或文件夹名称(使用Windows API)

    目录 前言 实现思路 源代码 前言 在项目开发中 经常需要去遍历某一个文件夹下的一些资源文件 为了避免重复造轮子 刚好在此记录一下 实现思路 1 给出一个文件夹名称 2 获取文件句柄 3 过滤掉 和 上一级和当前目录 4 通过获取 find
  • (一)抖音快手短视频去水印原理分析

    抖音 一 首先获取分享短链接 一 我打12360他竟告诉我不可以订票 洛阳综合保税区 海关 https v douyin com JrA4H4N 复制此链接 打开 抖音短视频 直接观看视频 短链接 https v douyin com Jr
  • nginx负载均衡

    目录 负载均衡 nginx的七层代理和四层代理 七层代理的就是http请求和响应 四层代理与七层代理之间的区别 正向代理与反向代理 负载均衡 upstream 算法 算法总结 stream 负载均衡 通过反向代理来实现 nginx的七层代理
  • 修改 Ztree 节点的图标 ( icon 与 iconSkin)

    1 使用 icon 首先 进入 Ztree 官网 查看 Api http www treejs cn v3 api php 你可以下载官网上的ztree压缩包 在里面有 自定义图标的实例代码 或进入这个地址下载 https download
  • Vue2项目练手——通用后台管理项目第八节

    Vue2项目练手 通用后台管理项目 菜单权限功能 tab js Login vue CommonAside vue router index js 权限管理问题解决 router tab js CommonHeader vue main j
  • QT获取电脑系统,主板型号,CPU型号,硬盘型号,内存大小等相关信息(一)通过CMD和WMIC命令行的方式

    QT通过CMD和WMIC命令行的方式获取电脑系统 主板型号 CPU型号 硬盘型号等相关信息 包括使用diskpart wmic DIrectX等 目录导读 一 DIrectX诊断工具 打开窗体查看 命令行输出 二 直接CMD输入SYSTEM
  • 【笔记】Oracle表中身份证、手机、邮箱脱敏SQL

    前天开始居家办公 用向日葵远程办公室电脑 但是昨天办公室的网崩了 导致无法远程 于是开始用腾讯云做数据库 为防止数据泄露就有了下边的关键数据脱敏操作 笔记如下 select from job xs where xh U201311735 R
  • 转:linux下配置JDK提示tools.jar/dt.jar权限不够

    原文 http lkf009 iteye com blog 1327912 提示权限不够的原因 CLASSPATH JAVA HOME lib tools jar JAVA HOME lib dt jar这样写是不对滴 要这样写 CLASS
  • Python字典用法

    get 函数返回指定键的值 如果值不在字典中返回默认值 gt gt gt a a 1 b 2 gt gt gt a get a 0 1 gt gt gt a get a 1 gt gt gt a get c 3 3 gt gt gt a g
  • 【超详细】POST注入(Less-11)、Cookie注入(Less-20)、二次注入(Less-24)、宽字节注入(Less-32)

    本博文仅用于信息安全防御教学 请遵守中华人民共和国网络安全法 目录 本博文仅用于信息安全防御教学 请遵守中华人民共和国网络安全法 POST注入 Cookie注入 二次注入 宽字节注入 POST注入 需要知道的一些知识 所谓POST注入指的是
  • 1、输入四个整数,按照从小到大顺序输出。(20分)

    题目 1 输入四个整数 按照从小到大顺序输出 20分 代码 注 题目说的是四个数的排序 我就直接写了个冒泡排序 public class One207 public static void main String args System o
  • Dilated Conv and Deformable Conv. 空洞卷积和可变形卷积

    空洞卷积论文地址 https arxiv org pdf 1511 07122 pdf 可变形卷积论文地址 https arxiv org pdf 1703 06211 pdf 之前一直知道这两个方法 一直没时间看论文和实现 后面碰到越来越
  • Node利用connect中间件 及bodyParser处理文件上传

    1 html
  • RuntimeError: Attempting to deserialize object on CUDA device 1 but torch.cuda.device_count() is 1.

    在服务器上用的GPU训练 然后保存模型 本地测试的时候load模型遇到的问题 应该是GPU所用的卡号不同 服务器是 cuda 1 本地是 cuda 0 所以会遇到这个问题 但其实在服务器上直接运行相同的测试代码是没有问题的 但也解决一下吧
  • JavaScript-cookie基础讲解

    http和https 安全 他俩都是负责网络通信 主要浏览器访问 浏览器访问服务器 服务器给我浏览器数据 关于http的特点 无状态 同时俩个客户端请求服务器端 他是没有办法分辩谁是谁 需要标识了 房卡 无连接 俩者的数据发送完 就断开连接
  • android停止handler的办法

    在当前活动的onDestroy 方法中添加 handler removeCallbacksAndMessages null
  • unity GC机制简单介绍

    GC全称是garbage collection 即垃圾回收 顾名思义就是一种释放内存垃圾的机制 这种机制主要作用在堆空间上 堆上的变量在存储的时候 主要分为以下几步 1 首先 unity检测是否有足够的闲置内存单元用来存储数据 如果有 则分