00:01
来,我们来看下一个叫B包的切点来解决哦,没看到屏幕,嗯嗯嗯,知道了,嗯,我们来看一下第六个啊,B包有什么样的缺点,嗯,前面我们说过B包的那个作用是什么来着。有两个作用,是不是第一个作用就是它的什么?这延长了我们局部变量的生命周期。啊,我们甚至觉得这个是不是它的一个优点呢,但同样一个事情,同样一个东西啊,在有的时候,在有一种情况下面,它是优点。你在另外一种情况下面,他可能就是什么缺点啊。举个例子,你长得很壮是吧?那有的女孩子就喜欢很壮的男孩子,那你就是优点。
01:05
是吧?但是有的女孩就喜欢比较苗条的男孩子,那你就变成缺点了。啊,对于他呢,也是一样的。来你写一下,先写个代码大家知道吧。好,这一次我搞个大点的数据一个。咔咔。那这个数度其实是挺大的,占用的空间挺大,能不懂这什么意思啊,是不是占1000个空,不是1000个啊,这这这真是数数度不会说占10万个空间大小的,就是说我是不是有10万个空啊,我这个数度是不是非常非常大,能理解不好,那接着呢,我内部再来一个函数FN2啊,下面我叫FN1吧。
02:04
好,我也不干嘛,我就这AR给认识行不行可以吧,接着我执行F1啊,我在上面给他return这个FN2。各位可以接着我用一个VF来存。请问产生B包没有,是不是产生了,那请问现在B包死了吗?没有死对吧?因为我的F是不是在呀。好,但是有的时候就有一个问题啊,也就是说我的B包是不是导致于我的这个数组一直不是垃圾对象啊,那可能我我现在的我执行完一次,我用完了知道吧,我用完了以后,譬如说我调一下完了,但是有问题。它那个由于B包的存在,是不是一直导致着他没有被释放。
03:01
但是我可能不用了,有没有可能。我用完了以后我就不用了呀,这不很正常的吗。啊,那也就是说函数执行完了以后,我们的函数内部的那个变量,它是没有什么释放的,占用内存的空间,为什么变长,这个变长如果你需要,如果你需要,那它是优点。是吧,如果你不需要了,那它就变成什么了,缺点了。那也就是说我要这么不用的,譬如说我执行完了以后,我这个这个内存是不是一直在占用啊。这里面有一个问题,就是有的程序员他不懂,知道吧,他也不懂。什么叫不懂呢?我们懂的话,我们是不是会把用完了以后,我要不用了,我会把F等于,什么等于呢?那个很大的那个数组对象是不是就释放了,但一对于不太懂的腾讯来说,是不是就这片非常大的个空间,是不是就白白占用的。
04:03
还能别人用吗?不能,因为它里面存的数据是不是能不能懂。啊,这就是他的一个缺点,就容易造成有一个概念了。叫什么呢?内存泄露,什么叫内存泄露?就是这个内存被白白占用着,你又用不上了,那现在我们就出现这种情况。我用完了以后,我不用了,不用了,关键是那个程序还不知道不去写这条。那不就把被占用去了,他会知道吗?不会,但是我们也不用了,知道吧,啊,我就不用了,那不就成为一个有个概念叫内存泄露,内存泄露就是这样一个事,等会我再详细的跟大家说内存泄露是怎么回事啊。解决办法,怎么解决?那就其实非常简单了,要解决,但是非常简单就是你知不知道的问题。能不懂让。
05:00
谁成为垃圾对象?首先是让内部函数。成为什么垃圾对象重而从而去回收让回收水呀,是不是B包对象是B包就要释放了,能不能懂啊?OK,你的B包所占用的内存空间也就是这个速度,是不是也会被是吧?是吧,啊好解决办法,首先第一个能不用闭包就不用闭包,这个呢,其实很难做,很难去做,做得到就是你做到一点就行了,你及时失望。这个能懂吗?能懂,现在我们重点不是说这个,这个容易懂,这个容易懂啊,下面呢,我们要给大家去说的是在面试或者笔试中经常会问的一个概念。
06:00
叫内存溢出与内存泄露。这这个不知道大家以前有没有听说过啊,没有听说过也没关系,我跟大家来讲,说明一下什么叫一个来啊,因为这个好说,这个不太好说,我们先说这个叫内层溢出,溢出大家应该能懂,什么溢出啊,就是那杯子满了,你还往里面倒水,那不就溢出了吗?是不是就出问题了,内存也算的,大家要知道我们一个程序能拥有的内存空间是不是有限的呀,你超过了这个空间,它是不是就程序运行还是运行吗?不能呐,你这个运行是要崩溃了,好不知道不知道,我们也来去给大家测试一下看看啊,我做件事情。我来一个复循环。写个东西来写一个。这个好写一个,这个以后呢,接着我来去又一个。
07:09
这几个力再一个好,而且我还做一件事情,看到啊好这位是什么写,我要把我要创建很多个A保存到OB节里面去,这个怎么保存比较就能全部保存上来,也就说我这个我这个循环便利,是不是产生很多个对象。是不是,但是呢,我现在希望把所有的对象都关联到保存到这个OB里面去,能不能保存。怎么团?比如说你这你这看起来怎么感觉像宿主了是吧。可不可以啊?
08:00
其实是可以的,那你想想看,这个里面我第二个数组和第一个数组会不会覆盖掉呢?会不会其实就是说我拿我的这个I下标是不是作为,也就是说obg里面的属性零都是什么东西啊,是不是都是0123之类的数字看可以,这实际上就有点像一个尾数组了。知道尾数组是是什么类型吗?啊,以前说过吗?没有等会就说一下啊,别着急。好,大家看啊,那也就是说我在负循环运行的过程中,我的这个对象,我的这个对象你是不是占用空间越来越大。能不懂,能懂吗?这波越来越大,他一直没有释放吗?会释放吗?我执行完了以后,你说这个我创建所有速度会不会是吧,不会,而且这个速度还比较大,来我要打开啊,打开一些东西先运行起来,你看我的这个,你看我的那那个里面啊,来我还没有,我有的就还没搞得特别大啊,先把它打开。
09:16
这其实没没有什么输出,输出我倒没有,我主要要做件事情,做件什么事呢?任务管理器。性能看内存结构。好,你看它现在啊,现现在还把它先关掉,关了以后呢,他应该会去,呃,再来一点啊,看这里啊。我这是几个零了。八个再加一个。谁打?
10:03
嗯,我的东西呢,我应该看他啊。看这个内存的结构,诶,它就不动了,把这些先都关了啊,先关一下。应该先让他,他应该要下来才行。我看一下。还不够大。不对,他应该要再下来一点,他一上来现在已经占多少。46%,46%这个应该是够了,这几个零九个零是吗。是吧,啊九个零,我这写下打印输出啊,写个打印输出,完了写个打印输出看一下。
11:01
是不是直接就爆了,我觉得估计他直接就爆了,我我这地方两个直接爆了。大家看到它的这个,它的这个一直在旋转,说明什么问题,看到了吗?刚刚看到看到这个线了吗。开始是不是内存的情况在这里,接着它是不是突然间急剧上升。集上运行以下以后,集祥这个极是什么原因崩溃了,这个崩溃什么原因崩溃了,什么原因内存崩溃了,你看呢,这里面说了一个很简单,什么西是不是内存不足啊,什么叫内存不足啊,怎么连内存溢出了吗?我的程序还在正常运行吗?已经没有正常运行了吧,能不能理解我的程序已经没有正常运行了,都都挂了。
12:09
能不能看到我说的意思,也就是说我不断的去,我一旦六一个数组是不是就需要一个空间是吧?啊,就需要一个空间等会问六个数字又是不是需要一个空间。是吧,好,本来我这么大,假我这么大,你需要一个空间,需要空间好有的时候我都分配给你对不对,有的时候都没问题,那关键是到达一定程度,我是不是分配不了了呀。也就是说你再需要空间,我我譬如说我还剩余剩余一兆,你小子一下子需要两兆,你觉得我还能搞定吗?还能搞定吗?不能,那怎么办?那就报错呀,那就出错了呗,也就是说内存一出示程序运行出现了一个什么错误,错误的原因是什么?
13:00
当程序运行需要的内存超过了什么剩余的内存时,就抛出内存溢出的什么错误。现在浏览器还做的挺好的,他就给你一个公会页面。能不能理解,就是用户看到你要写个那些一书写个你不可能说杨老师能不能把怎么把打印输出写在页面上面。你在想用这个浏览器的人都看不懂那些东西,他但是他看到这些东西,他知道崩溃了,好吧,陈先出问题了,他其实他也不知道内存一组,他哪知道这宅内行才知道啊,这有个内存不足。能懂吧,啊OK。啊,这个好懂,其实这个这个其实很好懂,因为大家知道内存它机器是有限的,对不对啊,你不能无限制的去分配嘛。能不能理解下面要说另外一个概念叫什么呢?内存泄露什么叫内存泄露呢?简单来说是占用内存没有被及时释放。
14:10
啊,那内存泄露是出错了吗?我的程序还能不能运行,能还是正常的运行的。记住了啊,我我内存泄露了,只是说我本来应该有更大的内存可用,但是由于你泄露了一部分内存,我可用内存是不是变小了,那如果我今天泄露一点,明天又泄露一点,明天又泄露一点啊,不然又泄露点,那你想我的内存空间是有限的。是不是,那积累到一定程度会导致于什么?是不是更容易内存溢出啊?能不能理解,譬如说假设我本身一共就八兆的内存,这个可能说的有点小啊,这个意思就行啊,今天我泄露一兆,明天又泄露一照是吧。
15:06
后天又泄露一兆,那不等我泄露三兆的时候,是不是只现五兆的空间了?正常情况下面我是有八兆空间可用,那由于你泄露的已经卸了三兆了,那我现在最多只能用几兆了,五兆,那我现在想申请六兆的空间会怎么样,是不是意思?那正常情况下会吗?不会的。那之所以现在申请六兆就一说是不是因为我这个内存泄露导致了一个后果呀。能不能理解,也就是说内存泄漏积累到多了以后,就容易导致什么内存溢出,那哪些情况是内存泄露的情况呢?啊,这里面说了几个情况。啊,第一个意外的全局变量,这个全局变量还有意外的吗。
16:05
有吗?有,尤其是一些水平比较次的程序员。啊,譬如说举个例子FN是吧,那他一不注意,他本来他想定一个变量A是吧,等于一个三可以吧,想定一个局部变量A等于三,我现在去用A用它是不是一样可以用啊,他还是以为他以为这个A是个部变量啊,记住了,他以为是一个局变量,他用还是用程序运行好像没问题。对不对啊,没有问题,但是啊,你想我运行来运去,最后按正常情况,如果A是个主面的话,它是不会FN1执行完,我调用一下FN,它是不是就会自动释放,但现在释放了吗?有没有没有。有人说那个陈学傻不傻?
17:00
那你一不注意,你也有可能出现这种情况,所以你要保证的是啊。用word去定义变量对吧?啊,建议不要用啊这种情况去定义变量。这个记住啊。好,这就说的是意外的全局变量就这么产生了。啊,有人说老师泄露一个这样的一个东西有影响吗?你能看出来吗?基本上看不出来,你这就这么一丁点的空间,没有什么影响,知道不没有影响,那那反过来说呢,如果是一个特别大的这个就这个积累多了就有可能有影响。哎呀,有人说老师你会搞这样的速度,这不是在把这个事情描述的更严重一点吗?能懂吧,好,这是这样一个事情,还有一个事情。
18:01
有的时候呢,我们会用那个set特步。嗯,OK,接下来我们可能会做一些事情啊,随便做,大家想啊,大家想我们这么做着,做完了以后是不是做一些什么事情,做就在不断循环的做呀,但是啊,但是有个情况。有的人呢,做完了以后忘了关了,就事情该做完了以后,他不记,我们知道这一个循环定时器,他是不是不断在做。而我我启动以后,也就是说启动循环定时器以后不关闭,我清理。大家想会出现什么情况?他是不是不断在执行,要不要占用空间,那肯定要啊。
19:03
能不能理解它会不断的去执行,我们要想把它,也就是说我们要想能够不泄露怎么办?就是当我不想再用它的时候,我应该把它清理掉吧,清理怎么清理掉,是不是clear interval需要有一个标识啊?问一个我我比较喜欢的名字特ID,它是个标识,把它给它什么呢?传进去,也就是说我不做这个事就会导致于什么。是不是泄露啊,因为他不断在干活,不断的在升级空间,那空间是没用的,也就是说我不用了知道吧,我可能譬如说假设我用过两三次,我就不用了。嗯,看。这个大家应该要去知道啊,这样一个事情,还有一个就是什么呢,礼包。
20:00
也就是说我们前面不写什么啊,FA1是吧,再写一遍啊YA啊,就搞一个随便搞一个吧,F2是吧,接着呢,输出呃,加加A吧,随便啊,就一个FN2。接着握一个F等于FN1括号。啊,我用过一次不用了,那你说这个地方我的A释放掉什么。有没有没有,也就是说你不去我们要示范怎么办?大家说过了F的意思嘛,那是不是就释八,但是这个部不太清楚,他是不是就不会做这个事。那不知道这个事我的A是不是一直都在。能不能理解啊。这样也会导致于他形。
21:03
嗯。这里面我们是说的是这样的三种情况,第一种呢是意外的全局变量。第二种是它。啊,最后一种是B包。这个是在面试中啊,很有可能问的东西。好,这样我们就跟大家去讲一下这样两个概念,这两个概念还是比较重要的啊。
我来说两句