Unity-GC优化相关笔记

这篇具有很好参考价值的文章主要介绍了Unity-GC优化相关笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Unity官网GC定义如下

创建对象、字符串或数组时,用于存储它的内存是从称为的中央池分配的。当此项不再使用时,其先前占用的内存可被回收并用于其他目的。在过去,通常由程序员通过适当的函数调用显式地分配和释放这些堆内存块。如今,Unity 的 Mono 引擎等运行时系统会自动为您管理内存。自动内存管理比显式分配/释放的做法需要更少的编码工作,并且大大降低了内存泄漏的可能性(即分配了内存但后续从未释放的情况)

简单来说,GC会在单帧【非增量式】中,遍历堆上对象,清理掉受Unity完整托管的已被标记为无用内存的内容,是一种行为。而优化gc则指的是如何加速这次回收操作,以防止玩家突然在某一帧感觉卡顿。

【这里着重强调托管是因为踩过一个坑,Texture2D是部分托管的类,新建一张Texture2D,并用Sprite.Create挂到一张image2d上,后面如果这个image换了别的Texture 原本的Texture是不会被释放的,这会导致内存泄漏】

GC的时机

  • 定时GC
  • 手动强制GC
  • 内存不够时启动GC获得额外内存

 

Profiler窗口可以定位是否是GC导致的性能热点

优化方法

首先,栈上内存是直接释放的,不走GC

  • struct中不添加引用类型变量,会导致GC监控该类型的对象,添加开销
  • 减少装箱

减少引用对象的创建与摧毁

  • 对象池管理
  • 减少Update等大量调用函数中,申请内存的逻辑

杂项

  • 字符串操作使用stringbuilder
  • for代替foreach
  • 在合适的时机手动GC

  


 

参考

https://blog.unity.com/cn/games/optimize-your-mobile-game-performance-tips-on-profiling-memory-and-code-architecture-from

https://www.cnblogs.com/hearthstone/p/13357925.html

https://www.cnblogs.com/zblade/p/6445578.html文章来源地址https://www.toymoban.com/news/detail-825253.html

到了这里,关于Unity-GC优化相关笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JVM】JVM垃圾回收GC相关参数说明

    -XX:+PrintCommandLineFlags : 输出JVM启动参数 -XX:+UseSerialGC :在新生代和老年代使用串行收集器 -XX:SurvivorRatio :设置eden区大小和survivior区大小的比例 -XX:NewRatio :新生代和老年代的比 -XX:+UseParNewGC :在新生代使用并行收集器 -XX:+UseParallelGC :新生代使用并行回收收集器 -XX:+UseParallelO

    2024年02月04日
    浏览(37)
  • Unity使用的GC方式——贝姆GC(BOEHM GC)

    Unity合作的Mono版本为Mono的早期版本,此时还没有使用SGen GC,后来Mono将默认GC方式改为SGen GC,Unity并没有继续购买,因此Unity使用的GC方式仍然是老的贝姆GC。 贝姆GC官方网页:https://www.hboehm.info/gc/index.html 贝姆GC是一种基于标记清除法的GC方式。其整体过程可粗略分为四个阶段

    2024年03月11日
    浏览(30)
  • golang gc的内部优化

    今天讲一个常见的gc compiler(也就是官方版本的go编译器和runtime)在垃圾回收的扫描标记阶段做的优化。 我对这个优化的描述印象最深的是在bigcache的注释里,大致内容是如果map的键值都不包含指针,那么gc扫描的时候不管这个map多大都不会深入扫描map内部存储的数据,只检查

    2024年03月25日
    浏览(24)
  • Unity 0GC或者最大限度降低GC方案

    Unity中垃圾回收(GC)频繁发生,会给游戏带来以下显著问题: GC暂停主线程执行:当.NET的垃圾回收器开始工作时,它会暂时挂起所有程序执行以进行内存清理和整理。这意味着游戏逻辑、物理计算、渲染等都会被迫暂停,这会导致帧率下降或卡顿,影响游戏流畅度。 帧时间

    2024年01月16日
    浏览(34)
  • 【Unity】Shader自定义GUI笔记

    0、效果 可折叠展开,自定义排版 1、首先做好一个Shader,手写、SG、ASE都行,节点名称命名要规范! 打开Shader代码,在结尾添加上 2、创建一个C#脚本 继承自ShaderGUI类 3、画布绘制 4、常用API 布局类 (在OnGUI类里面使用) ​

    2024年02月13日
    浏览(23)
  • Vue相关官网地址

    Vue: https://v3.cn.vuejs.org/guide/introduction.html Vue-Router: https://router.vuejs.org/zh/guide/ Vuex: https://vuex.vuejs.org/zh/index.html Vue-Cli: https://cli.vuejs.org/zh/guide/ Sass: https://www.sass.hk/docs/

    2024年02月16日
    浏览(28)
  • 一种KV存储的GC优化实践

    作者:vivo 互联网服务器团队- Yuan Jian Wei 从内部需求出发,我们基于TiKV设计了一款兼容Redis的KV存储。基于TiKV的数据存储机制,对于窗口数据的处理以及过期数据的GC问题却成为一个难题。本文希望基于从KV存储的设计开始讲解,到GC设计的逐层优化的过程,从问题的存在到不

    2024年02月04日
    浏览(48)
  • 常见JVM参数配置和GC性能优化

    常见的JVM参数配置 垃圾回收统计信息 -XX:+PrintGC     打印GC简要信息 -XX:+PrintGCDetails打印GC的详细信息 -XX:+PrintGCTimeStamps打印CG发生的时间戳 -Xloggc:log/gc.log 指定GC log的位置,以文件输出 -XX:+PrintHeapAtGC 每一次GC前和GC后,都打印堆信息。 堆设置 -Xms:初始堆大,最小堆 -Xmx:最大

    2024年02月16日
    浏览(29)
  • unity-内存GC

    Unity内存,原生内存(Native Memory)和托管内存(Managed Memory 其中Native Memory大家接触的会比较少,而且可操控性也比较少,例如AssetBundle,Texture,Audio这些所占的内存,这一部分内存是由Unity自身来进行管理的。我们平时开发通常会接触到的是Managed Memory,也就是我们自己定义的

    2023年04月09日
    浏览(23)
  • Unity GC

    本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com 在 Unity 中,垃圾回收(Garbage Collection,GC)采用的是基于标记-清除(Mark and Sweep)算法的自动内存管理机制。 基于标记-清除算法的垃圾回收包括以下步骤: 标记阶段(Mark): 在这个阶段,垃圾回收器会遍历程序中的对象,

    2024年02月20日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包