00:00
那好了,同学,咱们接下来我我我来问一下大家一个问题啊,我来问大家一个问题。呃,递归有结束条件,就一定不会发生占内存溢出错误吗?反过来再问大家一个问题啊,递归假设是有结束条件的。是有结束条件的,就一定不会发生。占内存溢出错误吗?假设递归是有结束条件的,就一定不会发生占内存溢出错误吗?不一定,各位啊。有的时候啊,有没有可能条件是有的,条件也是对的,也是合法的,但最后还是发生了什么占内存溢出错误,这是为什么呢?哎,这是因为你递归的太深了。你递归的太深了,有可能你递归的太深了,导致我这个空间怎么着,哎,不够了,导致我的空间不够了。
01:02
啊,就是说假设啊,假设这个结束条件是对的,结束条件是对的。假设这个结束条件是对的,是合法的递归,有的时候也会出现什么占内存溢出错误啊,占内存溢出错误,因为有可能递归的太深啊,占内存不够了,因为一直在干什么呀,压榨一直在压榨。啊好,这是这个事儿啊,所以得出一个结论,什么结论递归。递归啊,这块不建议不建议轻易用,明白吧?啊,不建议轻易使用递归啊,不建议在实际的开发中,不建议轻易的选择递归。
02:06
啊,能用for循环while循环代替的,尽量使用循环来做。啊,因为循环的效率高,耗费的内存少。递归耗费的内存比较大,另外递归的使用不当,使用不当啊会导致GVM死掉,会导致GM死掉,各位啊。最后补一刀啊补一刀,但但在什么呀。但在极少数的情况下,不用递归这个程序没法实现啊,没法实现,所以我再给大家补一刀啊,补一刀就是说我们这里呢,要说到位啊,首先第一个呢,我们要知道归这个东西啊,递归这个东西啊,它是什么呢?方法自己调用自己啊,这就是递归,递归在用的时候没有结束条件,就会发生占的内存溢出错误,因为它会一直压占,一直压占一直占,没有弹占啊,最后内存不够就导致啊最后出错了,Java虚拟机已经退出了啊,发生错误之后JVM只有一个结果啊JVM。
03:28
哎,发生错误之后只有一个结果,就是退出gbm啊,就是退出gbm,所以说呢,这块呢要注意啊,递归呢,假设有结束条件,并且是合法的递归,有的时候也会出现什么呀,内存溢出错误,因为有可能递归的太深,占的内存不够啊,因为一直在压,那么第四点我再补上一个什么呢,在实际开发中,我还是建议大家用for循环。就能用for就用for,能用while用while,明白吧,哎,能用这个循环就用循环,尽量别用递归,用递归的话耗费的内存要多一些,效率要低一些啊,因为使用循环的效率高一些啊,咱们耗费内存会少一些,明白吧?哎,另外呢,递归不要轻易用啊,用递归就会导致什么呀,就会导致诶有可能很容易G就死掉了啊,就死掉了,但是我最后给大家补上一刀什么呢?就但在极少数的情况下,不用归这个程序是没法实在某些时候你必须得用归,所以递归我们要学啊,所以递归我们还是要认真学习的啊,认真学习的。那么再往下呢,我我谈一下我个人的一些经验,好吧,我谈一下个人的经验啊,就是说在实际的开发中,假设有一天你真正的遇到了这个错误,你怎么解决?可以谈一谈你的思路吗?
04:55
就是你假设有你真的就遇到了这个这个错误就你遇到了啊,在实际开发,假设有一天你真正的遇到了。
05:03
你怎么解决这个问题?可以谈一下你的思路吗?怎么解决?就是就是假如一天你你就遇到他了,你怎么解决?嗯。怎么解决啊?哎,我来谈一下我的思路啊,就是我来谈一下我的个人思路。啊,个人思路是这样的,首先第一步。先检查,先检查递归的结束条件对不对?我说的很有道理吧,就先检查递归的结束条件对不对,就是说你这个条件有没有问题。就你不能说你这个条件是写了,写了之后你这个条件,呃,写的是个虚假条件,根本就结束不了对吧,所以说第一个就先检查地柜的结束条件对不对。
06:01
啊,如果递归条件不对。B,呃,如果递归结束条件啊,不对,必须对条件进一步修改啊,直到正确为止。啊,这是第一啊,首先第一步先检查递归的结束条件对不对,如果递归结束条件不对,必须对条件进一步修改,直到正确为止。第二步,假设递归条件没问题。你明白吧,哎,假如递归条件没问题。怎么办?就是这个递归条件,我们经过一个呃,小组的一个探讨,或者是开会或者是商议,我们经过一个探讨之后,发现这个条件啊,是没有任何问题的,但是呢,它的递归仍然是出现了这个错误,对吧?假设递归条件没有问题怎么办?那么这个时候需要手动的调整JVM的占内存,但占内存初始化大小。
07:10
啊,可以将占内存的空间调大点。啊,可以调整大一些,你明白吧,可以调整大一些啊,如果如果运行时,运行时还是出现这个错误,就是说第三步啊,第三步就是说呃,调整了大小,如果运行时还是出现这个错误。没办法啊,只能继续扩大什么,只能继续扩大啊,占初始化。站。呃,只能继续扩大占的内存大小。
08:03
没办法啊,就只能这样,怎么扩大,你可以通过这个参数啊,Java-X这个参数。Java后面加一个杠X呢,你可以看到啊,这个里边呢,有一个叫做呃,设置初始Java堆大小对吧,设置最大的Java啊堆大小。对不对,哎,等等吧,这块的信息啊,都可以对我们的一个啊堆栈空间进行调整啊,堆栈空间进行调整啊进行调整,那么这块的东西就相对来说是比较呃难一些了,各位啊,后期我们在做项目的时候,如果进行项目整体优化的话,可能需要设置我们的一个呃,堆栈大小啊,就是设置Java线程对栈大小应该是这个参数啊,这个参数可以啊,你比如说Java对吧,杠S啊杠XSS啊,然后后边呢,你运行某某某啊,你指定啊多少多少兆是不是啊或是多少多少G,然后接下来,哎,我们在这儿呢,再往后跟上某某某,点上Java文件,就是运行这个Java程序的时候,我们初始化的一个。
09:13
啊堆占大小啊,你可以去给他指定一下啊,指定一下你可以给它扩大一下,但你扩大有的时候我问大家机器的这个配置啊,由于这个金钱的一个限制,有可能我们内内存没有那么大,你要使劲扩那么大,那就对不起了啊,扩不了,扩不了怎么办?那只能花钱去买机器啊,只能去买更好的设备,诶然后呢,才可以扩大更大的内存空间啊,确实是这样的,所以呢这块呢,我们诶给他谈一下我的一个个人经验啊,一些思路啊,给大家说一说啊。对啊,调整大小,如果运行时还是出现这个错误,没办法,只能继续扩大占啊,内存大小啊,这个Java-X参数啊,这个可以查看啊,可以查看啊,调整堆栈大小的参数啊,就了解一下即可,各位啊,这块内容已经超出了咱们初学者的一个范围啊,现在呢,还达不到这个级别,咱们就先不用管它好吧。
我来说两句