00:00
好,那么同学们,那么请大家呢,咬咬牙哈,我们呢。讲最后一个题目,今天的OM的圆空间。那么言下之意,我们基本上已经把GVM的常见的。内存溢出情况都给大家介绍过了,干嘛占溢出堆?那一堆溢出最后是什么me space啊?那不多废话,我们呢,在前面的前提复习以后,我们讲过JAVA8是不是由新生代养老带永久带已经变成了云空间。那么现在我们已经。看到了。如果说是报。负GC以后也没有老年代没空间了,咱这儿是不是就会报我们的是吗?OM Java keep space对应内存空间挂了。那么各种情况。深度的调用递归,深度调用也爆了,那么现在同理,Me space对于Java逊拟云空间在看in memory,那么说过了。
01:02
它呢,已经用的是机器的本地内存了,不再是什么以前的这个虚拟机的内存,Mepace源空间的性能比以前的永久带更好。那么。但是呢,这个me space啊,它呢也会因为类太多把空间占满给报出来OM这样的错,那么接下来我们来看一下这个东东。Space出错,那么首先哈,我们要明白。圆空间它是方法区,方法区是不是装那些类的信息类的各种元素啊,说白了就是那个类模板,包括我们的常量池啊,什么乱七八糟的那些东东,那么我们先来看一下。前面已经讲过print flex初始化,我们来看看本机初始参数,我们呢,这个呢不多废话,前面介绍过。只要我在idea里面执行这个命令。由于前面讲过,我就不再废话了,节约时间。我就不再执行了,同学们前面都见过了。啥一情况,也就是说我们的me spacece初始的这个大小干嘛呀,只是20多兆,那么言下之际,你这个不停的往这个里面放一些泪的话,总有一天会把它灌满吧。
02:14
那么所以说我们现在故意干这么一件事。同学们。叫八版本呢,使用云空间来替代的永久带,那么云空间me space是方法区,在hot spaceport中虚拟当中实现都讲过了哈。那么它与持久带最大的区别就是原空间并不在虚拟机的内存当中,而是使用什么内存,本地内存跳出来了,OK,它不在一个锅里面跟你抢饭吃啊。那么这个时候干嘛?JAVA8的这个源空间,它主要存放这么一种信息,虚拟机加载的类的信息,比方说我们RT.java包里面那些student.class我这个点class i.class你们都要加载进来,一开始在方法区里面这些模板,这些基础的。
03:04
原数据就要让我使用,那么常量池,静态变量,编译后的代码等等,那么都会被放在这个圆空间,这那么我们要模拟原空间的这个溢出干嘛?我们只需要不断的生成这个类往圆空间里面挂。总有挂满的一天,那么就会超过它的指定大小。当然,我们老规矩。为了能保证大家看到效果,那么我待会儿会把我们的圆空间初始大小和圆空间的最大大小都设成多少啊,全部呢,设成了我们的。多少八兆,那么这样的话呢,八兆也装不下这样的频繁生成的是吗?加载类的这样的信息,那么加载的越多,超过八兆是不是就爆圆空间爆仓,爆满,爆炸这样的一种达到上限的故障和异常好,那么呢,不多废话,那么。老规矩,如果是什么,呃?代码少,咱们直接加代码多,那么上硅谷创始人同感老师定下的规矩,虽然说现在啊,同学们,我们已经超过五点钟了,但是。
04:06
还是要当弹敲上鬼谷就是老师真讲,学生真练,当弹敲代码。两三行哈,不重要的,咱们粘一下,那么这个呢,来吧。手写,那么首先干嘛呢?我们的static静态。内部类OM,呃,叫test这么一个类吧,那么这个类呢,我们呢。行动出来,什么也不干。那么呢,来。同学们现在呢啊,这是类,不是方法哈,那么有这么一个类,什么都没有,说白了现在就是你看public class这个是不是一个主类,主类肚子里面有一个静态内部类,这个是不是也是一种类啊,那么待会我们不停的利用这种静态的类,干嘛把它往这个。Stack里面去。珠,那么干嘛不断的生成这样的静静态类往圆空间里面灌,是不是把它撑满了那么好。那么这个时候为了。干嘛呢,呃,简约简约一些,我就把这个括号。
05:04
不换行,那么现在may是一切程序的入口,那么在这儿int I等于零,它是个计数器,就是模拟。技术。多少次以后发生?一禅。那么也就是说每生成一个对象,我就加个一,每生成一个对象我就加个些,我们给大家有一个感性的认识,就是假设我待会儿把圆空间的大小设成八兆,我们能够谬多少个类能够呢?把这个程序呢给搞坏。那么好,现在。那么干嘛干嘛呢,串一,然后我的快捷键哈,那么try catch,那么这一块呢,老规矩,那么不废话,那么在这一块呢,我们就打印出这个异常故障以后,那么在这儿。是吧,给同学们写好一个,那么就是什么呢?第。多少次号?发生了。一场。那么这个时候大家请看I。
06:00
兄弟们,没问题吧,那么大致的框架弄上来了,那么接下来这个问题就是我们怎么来保证加载的类?那么。砍到这儿呢,那么。来,同学们。不停的生成类。干嘛?Well。那么同学们,我相信这个没有任何问题吧,那么干嘛呢?只要我要处进来了,哎,加加,那么能每次加个接说明我生成一个对象,然后干什么呢?在前面我们学的时候cglab这些字解码技术啊。Enhance enhance这样的加强类,我们讲过,我们用它来生产,那么这个时候前面spring许丹老师,魏云慧老师。张宇老师,那么我们上这些框架部分,三大框架的老师呢,都给大家详细讲过,那么杨哥呢,这样呢就节约时间,不再多废话,直接开打,那么生成一个类以后设置它的什么。Super class,那么就是我们上面的OM test反射过来第2CLASS,那么这个动洞干什么呢?在set use在开,不用我们不用缓存,那么来,那么这个时候的话呢,这个东东在set干嘛call back,它是不是要有涉及到一个函数回调,那么我们来看一下这个方法里面哈,这块重要是你看c g lab spring里面的东不懂干嘛扩back一个回调函数,一般这个是个接口,那么这个时候我们用哪一个经典的时间内是不是用。
07:26
方法的intercept,那么拦截器,那么method intercept这么一个东东,然后呢,这块我就直接简写了啊,是六出来的,那么完成了这个回调函数的接口的编写,那么干嘛通过反射计数,那么method proxy那么点invoke super那么。产生这么一个不停,要产生OM加载这些通道。那么干嘛呢?这个对象是哪个哦,然后呢,参数,那么这些是反射的基本功,不废话,那么来同学们,这些完了以后,这个东东干嘛create那么OK,那么这么干了以后,我们呢,将会获得一个。
08:08
啊,这报错,诶刚才这个I不是写了吗?好不管了哈,大家看现在的程序不报错,那么OK这块,那么也就是说用。DA。干嘛CB的动态自码技术那么不停的这么create,创建这么一个类不停的,因为由于它是静态内部类又是静态的东西,是不是不停的往这个space这加载啊,因为静态的属于所有类的模板和原版。模板,那么就要让其他的实例来调用,所以说呢,不停的生成模板,不停的加载,那么这样的话呢,是故意干坏事,然后呢,让这个mepace给满了,那么。来,同学们。那么在这呢,我们呢,把me spacece最小初始和最小都他妈干到了什么?这么一个八,这么一个大小,那么来同学们,我们干这么一件事,那么言下之意,这个时候是不是不断的往里面灌。然后呢?
09:00
我要戳,不停的往里面,现在只有多少八兆,那么同学们,我们呢?大家请看一下效果什么,情况多少,最后发生异常276次以后,那么大家请看经典的out of memory me spacece,云空间爆了。那么这个时候干嘛?讲到这儿,我相信同学们今天这节课对我们的面试题的讲解,对我们知识的深度,我认为你就不会再跟面试官再打什么OM out of memory,什么Java keep space,堆,内存溢出也有可能,干嘛你用这个在原空间里面去生成静态类。加载这些静态的把mepace给撑爆了,那么好,那么同学们,我相信。今天下午我们讲的这。123456这六种OM的故障,异常的深度的解析,足够同学们应付一般的面试,那么这样的话呢,我们的当然。我们的知识的深度也会随着这些大厂的要求慢慢的变成大厂。各大。
10:05
高薪,优秀互联网公司所需要的人。生产。那么。希望同学们呢,耐得住寂寞,耐得住单调。挺立在孤独、失败和屈辱的废墟上,将我们的Java的学习进行到底。好,今天的课就到这儿,谢谢大家。
我来说两句