unity GC机制简单介绍
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
unity GC机制简单介绍相关推荐
- 垃圾分代回收机制简单介绍
针对GC的简单介绍 JVM对自己的内存进行了划分5个区域,分别是堆,栈,方法区,本地方法栈,程序计数器.Java中对每一种类型都规定了具体的不可变的大小.所以所有的内存都是由JVM自动分配,所有的内存 ...
- Access Token机制简单介绍
Access Token 机制简单介绍 我们在访问很多大公司的开发 api 的时候,都会发现这些api要求传递一个 access token 参数.这个参数是什么呢?需要去哪里获取这个 access ...
- java同步机制简单介绍
在java编程里经常听到类似的术语: 这个函数是不是同步的... 本文就简单介绍下什么是同步, java中同步的一些处理方法. 1.同步问题产生的原因 Java中同步问题是伴随这多线程而产生的, 也就 ...
- Unity动画系统简单介绍
Unity动画系统知识点简单介绍(简易) 本文是学习文,其中转载某些文章,如有侵权,联系删除. 学习要点: 1.动画的分类 游戏物体的基础动画设置,UGUI设置的按钮状态,2D游戏Sprite动画,R ...
- Android IBinder机制简单介绍
原理简介 我们都知道android 是通过IBinder来实现IPC(Inter Process Communication)进程间通信的... 参考:Android进程间通信(IPC)机制Binde ...
- [Unity存档系统]简单介绍Unity常见存档系统二JSON以及使用方法
学习目标: 如果你和我同样苦恼于游戏相关的数据怎么存储与读取,那么不妨看看这个up主有关Unity存档系统的教程.[Unity] 存档系统 Part 1 | PlayerPrefs | Unity初学 ...
- POW,POS,DPOS共识机制简单介绍
区块链技术的诞生基于共识机制,所谓的共识,简单来理解,即打成共识一致的观点,随着技术的发展与演变,我们听到了越来越多的共识,例如:POS,DPOS,POW,Pool验证池,POC,POR等共识算法机制 ...
- android ibinder 机制,Android IBinder机制简单介绍
原理简介 我们都知道android 是通过IBinder来实现IPC(Inter Process Communication)进程间通信的... 借用一下: 1. Client.Server和Serv ...
- JVM类加载机制简单介绍
本文为<深入理解Java虚拟机JVM高级特效与最佳实践(第三版)>一书的摘要总结 类加载时机 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最 ...
最新文章
- python中np.multiply()、np.dot()和星号(*)三种乘法运算的区别
- 一篇关于java变量定义的文章
- python利器怎么编程-Python任务调度利器之APScheduler详解
- 画图软件怎么做性能测试,软件性能测试能力提升解决方案.pdf
- a.out、coff、elf三种文件格式
- 前端学习(2663):vue3.0的todolist
- oracle的al32utf8,oracle字符集修改(AL32UTF8-UTF8)
- DRD:线程错误检测器
- @Html.ActionLink方法
- Android计算器简单实现及代码分析
- GAMES101-现代计算机图形学入门-闫令琪 - lecture6 光栅化2(抗锯齿) - 课后笔记
- 跨域单点登录解决方案
- python高级进阶_20_进程之间的通信之queue(Poo演示)
- Git详解之特殊配置与钩子应用
- Multisim软件的基本使用
- AW-Convlution:An Attention Module for Convolutional Neural Networks
- 一些常用的「a」标签分享方法
- Window10安装配置TWinCat3
- 安东尼罗宾--激发你的无限潜能[连载]--11 12章
- [转]深入Mysql字符集设置
热门文章
- 计算机各配置性能如何区分,怎么测试电脑性能?判断电脑性能主要看什么?
- 免费在线生成二维码网站,支持二维码自定义
- Word 2013 设置封面不含页码
- 免费的Office办公套件LibreOffice for Mac
- 梁冬一席演讲:人生的最高境界是“不二”
- 计算机组装需要注意什么东西,组装一台计算机需要注意那些问题?
- http/https/浏览器
- Android解决Could not find manifest-merger.jar问题
- 图解TCP/IP 第一章 网络基础知识
- AD(九)原理图Value值核对、网路编号核对、元件名称核对