00:00
诶接着啊,咱们给大家举个例子,哎,通过这个例子啊,咱们来看一下这个堆空间的这个数据的一个解读情况,好那这个例子的话呢,我们来看这个程序啊,这个程序呢,是这样子的,我这呢生级声明了一个叫全局的一个常量,这个呢是一兆对吧?诶一兆的一个大小,然后呢,在我们这个方法当中啊,我这块呢,声明了四个变量,然后每个变量呢,都是一个BA型的一个数组,呃,分别呢,对应的是两兆,两兆,两兆,然后这个呢是四兆啊一共呢算是这个十兆的这个大小,然后在这个main方法当中,我们去调用这个方法,好,那我们来看一下这个程序执行过程当中啊,我们这个堆空间的一个使用情况啊使用情况,那对应这个参数啊,已经给大家都写好了,哎并不陌生,这块呢,就是我们最简单的一个参数,这个呢,就是我们更详细一点的参数,那实际上呢,有这个详细以后呢,这个简单参数呢,咱们也可以不写,哎是没关系的啊,可以不写,然后这呢是指明了们咱们这个对空间的一个初始大小。这呢是对空间的一个最大大小是20兆,然后后边这个参数呢,指明我们这个新生代的一个大小是十兆,那此时的话呢,我们这个新生代老年代这块呢,是不是各有这个十兆空间呀,然后呢,我们这个有个survivor,呃,Raciio这个呢是八,也就说我们这个新生代里边呢,这个伊甸园区呢,咱们就是八兆,然后两个survivval区呢,就是各是一兆,那这个数据呢,分晰的,这个分配的话呢,应该是比较清晰的,后边的话呢,我这块指明了一下,使用叫SGC啊,使用我们最简单的一个叫串行的这个垃圾回收器,行啊这个前面这个参数呢,加不加都可以啊,然后把这个参数呢,整个CTRLC以后,我们在这个啊run这块,呃这块注意一下啊,咱们先来给大家演示一下,咱们这个在JDK7当中,那七跟八还有区别吗?诶这块给大家演示一个比较有意思的一个事情,好,那我们先来在这个JDK7当中来看一下这个情况啊。
01:42
在七当中啊,咱们针对于这个jc lock test1对吧,我们把这个参数呢,都给大家补充上,就是我们刚才说的这个参数点,OK,跑一下。好,这呢就出来了,首先的话呢,针对我们这个堆空间的一个分配情况呢,大家首先应该是清楚的,对吧,就我们这时候的这个,呃,叫什么from区,Two区,或者也称为叫survivval区,零区和一区分别呢,是一兆,这个伊恋区呢是八兆,老年代是十兆,十兆对吧,是这样的一个场景,然后的话呢,我们现在看一下咱们呢,执行完以后啊,这块你看发还发生过一次这个GC呢,是吧?执行完以后的话呢,我们来看一下这个空间的一个占用情况啊,哎,这块呢,咱们刚才是不是也讲了这个default new指的就是我们这个zero jc对吧。
02:28
好,那我们看下这个参数的一个情况啊,然后呢,这个使用我们这个CGC的时候呢,咱们整个这个to大小呢是9216,诶首先呢,这个数呢,咱们之前呢,给大家是提过,你看这个数呢,咱们知道了这个新生代呢,应该是这个十兆,十兆的话呢,是不是应该是10240K啊。你看现在并不是对吧,哎,我们再调一下这个计算器。哎,再调这个计算器,大家看一下这个9216这个数的话呢,你看我们这个8192啊,8192,我们加上这个1024。
03:03
诶等于是不是就等于这个9216啊,哎,就是这个数是吧,那也就是说呢,咱们这个这块显示的实际上是我们可用的一个内存大小,因为呢,咱们对于这个新生代来讲呢,分成叫一零元区,这个SURVIVOR0区,SURVIVOR1区,这呢三个空间当中,我们说一零元区和其中的一个survivor区呢,是可以使用的,总会有一个呢,这个survivor区它是一个空的,因为呢,这块用的是这个复制算法,对吧?哎,我们说谁空谁是to嘛,它会一个空白的,所以这块呢,只是显示我们可用的一个大小啊那那针对于我们这个情况呢,就是相当于没有把这个1024呢给它加上,你这个一加的话呢,就是10240了呗。对吧,诶9216,你再加上一个啊1024,然后等于这不10240,就是我们说这个新生代呢,一共是十兆啊。行,那么在这个里边的话呢,我们看到这个,呃,伊甸园区呢,是8192,它占用了53%,那咱们这块呢,稍微的去算一下这个数啊八幺。
04:01
98192。嗯,这个呢,去乘以一个。嗯,0.53是吧,诶这样一个数值,哎,就得到这样个数,这个数呢,你看稍微的它会除不尽啊,就是我们在真正使用这个内存的时候呢,如果它完全除不尽的话呢,我们就会发现它不会是特别的精确的一个场景了。啊,特别精确一个场景,OK,这个大家稍微注意一下啊,那么这个8192呢,咱们知道呢,它实际上就相当于是这个八兆呗,对吧,那八兆到53%呢,相当于就是一个四兆的一个空间,哎,对吧,哎,相当于就是一个四兆空间,那么这个四兆空间呢,实际上是不是对应的就是我们这里边这个四兆了。哎,有点像他了,或者你可能说,诶那怎么不是这两个四道呢,这个咱们接着往下分析啊,嗯,然后这个from区呢,这51%呢,相当于是呃,这个有多大呢?应该是我们有这个呃0.5兆是吧,这个呢,就是我们这个其他的一些变量的占用的这个空间啊,然后接下来咱们看一下这个叫呃老年代啊tennu的或者叫old的JC都是这个老年代,老年代的话呢,我们也是一个1024兆,这咱们已经说过了,它使用了叫6144K,哎,这个644K,这是它使用的一个比例嘛,那6144K我们要除以1024。
05:14
6144啊,除以1024等于,你看这个结果呢,是不是正好是六啊,那这个六的话,你会想诶,它跟谁是对应的呢?是不是正好呢?是我们上面是不是有这个三个两兆的一个空间加一起是不是正好是六兆啊。所以哎,所以所以咱们这块呢,是不是就可以这样来分析,你看啊,一开始的时候呢,我们这个1D区呢,是放了两兆两兆两兆啊,就是我们对应的前面这三个变量。啊,分别呢,是两兆的一个空间,然后放完以后呢,接下来咱们这块还剩两兆空间,这呢是一兆,这是一兆,咱们下面是不是要分配这个四兆空间了。我分配这个四兆空间的时候呢,显然我们这时候呢,这个伊甸元区域你放不下这呢也放不下,哎,我们触发了一次GC嘛,哎,触发这次的一个效果的话呢,这个两兆两兆两兆在我们这个from区和two区是不是也都盛不下呀,所以呢,咱们就会出现呢,这里边儿的三个两兆直接就蹦到我们这个老年代这块了。
06:10
哎,直接就蹦到这儿了,然后你这个触发这些以后呢,我们这个一零园区呢,就空出来了,我们就把这个剩下这个四兆空间呢,就放到这儿了。能理解是吧,那通过我们这个图示呢,诶这不就讲清楚了,我们这个位置放的就是你的第四个变量,然后呢,我们这个60%呢,放的就是你上边的这样的三个变量,那关于我们呃下边这个呃呃这老年代的一个说明,咱们到这关于这个pro space这个咱们就不多说了,这是你加载这个类的一个情况了啊这个咱们就不介绍了,上边这块呢,应该是比较清晰的,然后后边这块呢,主要标识的就是我们这个,呃,这个伊甸园区它的一个初始的一个,呃,虚拟内存地址是多少,那这呢是我们整个的新生代的一个地址啊,这个地址你看就是这是一个初始地址,这是一个呃,相当于最后的一个地址了,然后这个初始地址呢,一上来就我们先分配这个叫伊甸园区啊,它到这儿,然后这呢是咱们这个结束的地址,这个地址呢,你看跟这个地址一样。
07:05
对吧,还跟那地址一样,然后呢,它结束的是在这这个结束的地址呢,恰好就我们这个地址的一个开始啊,这就是内存空间分配的是哪一段,这个地址中间的这个区域呢,就是你对应的这个区域的这个存放数据的一个位置啊,是这个意思。哎,下边呢,也是同样的道理啊,哎就不多分析了,这呢是针对针对这个叫GTK7,然后呢,大家你看啊,我要换成这个GK8的时候呢,你发现这个事呢,就有一些变化啊。我现在把这块呢,给他做一个截图。做个截图,现在呢,我们替换成呢,是JDK8这样的一个场景。哎,把这个位置我们换成是这个1.8,哎,上面呢,我们都不用变啊。嗯,此时呢,我们再做一个执行。好,那这时候呢,我们做一个对比,大家看一下呢,呃,当前呢,是不是有一些不同了,嗯,在这个伊甸园区呢,你看这时候呢,它显示的是这个数据,然后呢,我们这个,呃,Tennu的这个老年代的话呢,它显示的是这个数据,它这个时候使用的是40%是吧,我把上面这个数据呢,同步的我们做一个标识看这是一个它。
08:18
然后呢,这个我们这儿呢,是ten的在这儿,哎,它呢是60%行,上面呢,咱们已经说过了啊,这个6144呢,咱们直接除以这个1024,结果呢,是不是正好是六啊,哎,也就是说我们这有个六兆的空间,就是我们一开始那三个字节数组,然后现在的话呢,是4096,这个4096的话呢,要是除以1024是多少呢?诶大家你会发现呢,它这个结果呢,是不是正好是四了。4096。除以四,哎,说错了。这个4096除以1024,那这个结果呢是四,这个四的话呢,就意味着咱们现在呢,是不是有一个四兆的空间存放在我们这个老年代啊,而你上边这个78%呢,这个八幺九二百分之七十八这个数呢,咱们也可以算算啊,8192。
09:12
乘以。78%啊,0.78,哎等于这个数,这个数的话呢,你看基本上我们再去除以一个叫1024等于,哎6.4,哎,那基本上就是六倍,哎,大家能明白我想说的这个意思了吗?就是说呢,在我们这个JK8当中,跟这个七的这个行为啊,不太一样了,我们这个JDK7当中呢,是这样子的啊,就我现在要分配四兆呢,不够用了,你把你这三个两兆呢,放到这个老年代,然后把这个四兆放在这儿,而我们这个JDK8当中呢,它不是这样子的。啊,我们所谓的说大对象直接进入老年代,呃,在我们GD8当中呢,说你这三个呢,你就别动了,你就还放在你这个,呃,新生代当中是吧,而我们这个四兆空间呢,发现这个空间不够了,我呢直接进入老年代。哎,这呢,就是我们这个JDK7和JDK8呢,你看在这个数据在这个处理上的一个不同。
10:03
啊一个不同,那顺便的话呢,咱们把这个,呃,对空间这里边儿这个参数呢,如何去读,什么意思,咱们也给大家讲解了一下啊,相当于两个事儿啊,大家呢,可以关注一下。
我来说两句