讲讲.NET内存泄露和内存溢出及区别

五年工作经验的小白这次面试的是一家外包公司,HR的小姐姐介绍的很不错,什么六险一金,年终奖,不加班等等,听得小白真想立即就去上班。一面是乙方电话面试,如果乙方过了才会去甲方面试,真是花花肠子多啊。.
    这次面试的过程很顺利,就是聊了聊小白参与的项目,在项目中觉得亮点的地方,在项目中的角色,小白开始感觉还不错。聊完项目后,面试官开始提问题了,让“讲讲内存泄露和内存溢出及区别”,小白想了想答道“内存溢出是...内存满了,内存泄露是...软件的内存分配有冲突了”。答完这个问题,面试就结束了,小白也没有收到二面的邀请,可郁闷了。
    这篇文章就替小白分析一下,面试失败可能的因素,聊项目的时候虽然感觉跟面试官聊的不错,其实好坏结果面试官是不会直接告诉你的,感觉良好只是小白自己的感觉。建议小白在面试之前可以看看他们公司的招聘要求,根据招聘要求的技术和实际项目结合来聊要好一点,比如招聘条件有“熟练使用WebApi”那么你就聊点在项目中使用WebAPI的场景和知识点。我们再来看问的最后一个问题,最后一个问题可能是面试官给小白的最后一次机会,如果他能把那个问题搞明白的话小白也可能通过面试。不过在这样卷的时代,人才太多了,也有可能有比小白更牛逼的人。这就是需要小白不断提高自己了。

    下面我们针对最后那个的问题来替小白解答一下。

1、内存溢出

    系统不能再给你的请求分配所需要的空间了,比如你申请了30M,系统剩余内存只有20M了。这就叫内存溢出。
    比如一个办公室空间有限只有5个工位,领导安排6个人来这屋,还有一个人怎么办?只能找领导安排其它地方了。还比如在栈的操作中如果栈已经满了,当我们再对栈进行入栈操作就会造成上溢。

讲讲.NET内存泄露和内存溢出及区别

2、内存泄露

    内存泄露是申请了内存空间的变量一直在占用,无法释放。比如申请了一块内存空间,没有回收一直占用,直到最后内存溢出。
    比如在C#中使用非托管代码,如果不使用析构函数回收就会造成内存泄露。如果不是特殊情况,所以建议尽量不要使用非托管资源来编写代码。还比如在代码中使用了静态变量也容易导致内存泄露,关于内存泄露的情况大家可以查看之前的文章“避坑指南:可能会导致.NET内存泄露的8行为”。

结语

    本文通过小白面试的情况总结了小白在面试可能出现的问题,还具体讲述了内存泄露和内存溢出及区别,大家想想小白面试可能出现的问题还会有哪些?欢迎留言讨论。希望本文对大家学习和工作有一定参考价值,同时欢迎大家留言讨论,谢谢大家的支持。