unity开发常用面试题

1.什么是GC 什么时候会触发GC
 在游戏运行的时候,数据主要存储在内存中,当游戏的数据在不需要的时候,存储当前数据的内存就可以被回收以再次使用。内存垃圾是指当前废弃数据所占用的内存,垃圾回收(GC)是指将废弃的内存重新回收再次使用的过程
 unity内部有两个内存管理池:堆内存和堆栈内存。堆栈内存(stack)主要用来存储较小的和短暂的数据,堆内存(heap)主要用来存储较大的和存储时间较长的数据
 垃圾回收主要是指堆上的内存分配和回收,unity中会定时对堆内存进行GC操作
 堆上的变量在存储的时候,主要分为以下几步:

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

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

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

2.你了解数据结构吗? 说一下链式和线性结构
链式结构:内存中不是连续的,靠指针来查找值
线性结构:内存中是连续的

如果有一个数据经常需要查询,请问用那种结构要好一点,为什么?
答案:线性,因为内存中是连续的,读取文件的时候,会先从存储器读取到寄存器再从寄存器读取,如果内存是连续的可以增加缓存命中率

3.什么是对象池,什么情况会用到,要你来写对象池你会怎么写,说一下大概思路
对象池主要用在需要经常生成的对象,而经常生成销毁会带来GC操作
所以就不销毁了,只是把对象隐藏起来,下次要用的时候再激活对象就好了
而对象在生成的时候就封装一下,大致思路是先看对象池列表里面还有没有没激活的对象,如果没有就生成,有就直接激活
而在隐藏的时候直接移动到列表的前面去,方便下次激活时候的查找
生成的时候也会消耗性能,可以预先生成一个大概的个数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值