00:00
那么关于我们说的这个对象分配过程呢,咱们从图示上呢就讲解到这儿,那接下来呢,为了大家更好的去理解咱们这呢写这个代码,通过这个代码呢,咱们再来看一下,诶这个代码呢,相对来说比较简单,所以这呢我就直接把它写好了,诶当前这个类中我声明了一个属性是一个BAT的一个字节数组,这个数组的长度啊,我这用的是一个随机数。啊是200KB,这作为它的一个上限,对吧,然后呢,在main方法当中,我们造了一个list,不断的这个创建咱们当前这个类的对象,因为这个对象里边呢,有一个比较大的一个属性是吧,不断的往我们这个release里边去添加当前这个类的对象,通过我们这个sleep呢,来控制一下我们添加的这样的一个呃速度,哎,是这样一个情况啊。好,那么我们设置当前这个堆的空间大小呢,是这样子的,600兆,那首先呢,我们进行一个编译。那那接下来呢,我们在这个run当中呢,做一个这个配置,找到咱们当前说的这个he instance test,好把我们这个参数呢给它加进去就可以了,是吧,然后呢,Apply OK啊做个应用行这块呢,我们把它呢执行起来。
01:05
那执行起来以后呢,我们就使用一个工具,这个工具呢,咱们前面也说到过,呃,接VIVM啊,然后这块呢,选中咱们当前的这个进程,然后呢,在我们这个微数JC当中进行查看。哎,这呢,我们看到这个这个伊甸园区这个数据呢,一直不停的去增长,哎,当它增长满的时候呢,我们进行一个叫央JC是吧,这个时候这样JC你注意跟咱们真实这个情况还有点区别,因为咱们这个样这些完以后呢,里边是不是没有垃圾啊,全部被回收了是吧,那全部不是全部呢,就是进入我们这个幸存者零区,但是幸存者林区呢,显然呢,是不是这个空间又盛不下呀。那我们会发现呢,部分数据呢,就进入我们这个叫养老区。哎,就成这样一个过程了,然后接下来这个过程呢,不断的去这个。添加是吧,哎,就是这样个情况,那现在呢,你看我们这个O的区呢,已经接近于这个满的这个状态了。那当我们这个新生代这块呢,在进行过这个样JC的时候呢,呃,没有对象呢被回收,所以呢,肯定呢,是不是我们就要报这个,哎大家看这哎是不是auto memory这样的一个情况了。
02:09
没问题是吧,好,那么回过来呢,我们想带家带着大家看的是这块啊,虽然说我们这个这个进度呢,比较窄啊,但是我们也能够基本上看的清楚。我们看到这个,呃,伊甸园区呢,它的这个整个呢,这个走势呢,是这样的一个情况,看看大家能不能理解我们呢,这个数据从这个伊甸园区是不是不断的去添加啊,所以它的内存的使用情况呢,是不断的增长,当一旦达到它的这个上限的时候,我们呢,是150兆嘛,达到它的上限的时候呢,我们就进行过一次GC。所以呢,你每次看到上面这个GC的时候呢,就是处在我们这个算是封底的时候是吧?哎,因为这呢意味着执行了一次GC,然后接下来呢,这个呃,伊甸园区是不是数据呢,在不断的去增长,然后在这次完以后在不断的增长,所以我们看到这个伊甸园区它的这个呃,这个形状呢是这样的。能理解对吧,然后呢,当我们进行完一次GC的时候呢,没有被回收的这个数据是不是就要存放在我们这个叫VI是吧?所以vival区呢,大家看到的是这样个情况,就是在进行完JC以后,数据呢,就存放在我们这个新增者区了,然后新增社区呢,在你这个呃,伊甸园区不断的增长的这个过程当中,它这个数据呢,始终是这么多,所以呢,看到是这样个情况,然后再进行完GC以后,我们这个数据呢,是不是就要谁空谁是to,就该接着呢,往我们这个SURVIVAL0里边去放了,哎,就往这放,所以呢,你看到这样再进完这些以后呢,数据接着往这放,再往这放,那这个溢出了。
03:36
就整个我们这个结束了是吧,所以大家看到我们这个幸存者区呢,它是这样的一种形状,形状那么看我们这个叫养老区呢,或者叫老年代呢,这个大家能理解吧。哎,仍然呢,是在我们这个伊甸园区数据不断增长的过程当中,那我们这块呢,始终维持的是不变的,然后当你这块进万一4GC的时候呢,我们数据呢,在这个新增者区存不完了,剩下的是不是放到我们老年代这呢,是突然进行一个增加。
04:03
诶,然后呢,在进行完这个新生代的样JC的时候,哎,我们这块呢,老年代在突然呢,诶收到了一波来自于新生代的数据,所以呢,对于老年代来讲,它的数据呢,是不断增长的。嗯,是这样子的,那么在我们这个呃,出现OM的时候,我们最后报的是不是我们这个叫hi space啊这个呃,对空间的一个OM,这个OM呢,实实际上啊,主要是报在我们的这个老年代这块。啊,当我们这个新生代的这个数据接着呢,在进行完样JC之后呢,他要往老年代去放的时候呢,发现老年代已经盛不下了,那那这时候呢,我们要进行一个老年代的垃圾回收,我们呢理解成叫for j c,或者呢称为的叫major j c。啊,这个呢,暂时我们认为他俩呢是完全一样的意思啊,那么在进行完这个JC的时候呢,发现咱们这里边呢,任何的数据都不能够被回收啊,因为咱们把数据呢都放到了a release当中,而a release当中始终被占用啊,没有垃圾。
05:02
所以呢,诶我们这时候呢,就是在不能够被清理掉数据的情况下呢,我们再往里放,放不下了,就出现了oom,所以通过这个图呢,大家去体会一下,咱们不同的这个区域,它的这个形状是不一样子的,能够去理解一下。那么对于圆空间呢,主要针对的就是咱们一些类数据的一些加载啊,始终呢是比较平稳的,没有额外的再去加载一些类,所以说呢,始终呢是这样的一个形状,哎,咱们下一章呢,重点呢就要说一下这个,呃,所谓的圆空间或者叫方法区,它主要呢存放的是哪些数据。好这块呢,大家去理解一下这个过程啊。
我来说两句