00:00
好,那接下来呢,咱们做一个总结啊,做一个总结,那通过咱们刚才呢,给大家演示这个叫站上分配,同步省略和标量替换,哎大家呢,应该能感受到呢,说我们经过这个逃逸分析啊,整个这个效果是不是还是非常好的呀,那进而的话呢,诶我们是不是可以试图得出一个结论说呀,这个堆空间是分配对象存储的唯一选择吗?是不是答案呢,就是否啊哎就是说是个no,那因为呢,我们有这个占上分配是吧?好注意这个呢,还不是咱们最终的结论哈,诶咱们呢,这里做一个小结啊,再拓展一些新的这个内容来说明一下。啊,首先咱们提到了说这个逃逸分析啊,这个呢,是在我们JDK7之后呢,就自动的添加上了是吧?诶但这个呢,自动的添加啊,咱们还需要多说一句,诶是针对于咱们这个服务器端哎,才会有这个行为,哎,我这呢就提到一个叫杠server这样一个指令啊,就是只有启动我们这个server的模式呢,咱们可以开才可以呢去开启这个叫逃逸分析。那咱们这块呢,在刚才演示的过程当中,从来没有去开这个叫杠4VER是吧,主要原因呢,是因为咱们这个啊,你看我这问二一下啊,CMD进来Java。
01:09
哎杠这个version,诶,我们陌认情况下呢,在64位的这个,呃,电脑上呢,我这启动的其实就是一个server的一个模式,哎,所以说呢,我就没有再去这个调用我们这个杠server这样一个操作啊,也就是说呢,我们这个啊逃逸分析呢,是在我们这个服务器端模式呢,我们才会开启的啊这是其一,你要在客户端呢,它本身也没有这个逃逸分析。啊,这是说的这个问题,那其次的话呢,我们关于这个逃逸分析啊,还需要呢,再做一个说明,这里边儿提到呢,他还并不是特别成熟。并不是特别生楚,在这个九九年的时候呢,相关的论文呢,就已经发布了啊,尽可能呢,其实我们通过逃逸分析的目的呢,是不是避免在堆上呢,去创建对象啊,进而呢,提升这个性能是吧?啊在1.6的时候呢,我们才有了具体的逃逸分析的实现,但是这项技术呢,到如今呢,也没有特别成熟啊,主要原因呢,是因为逃逸分析本身呢,它其实也需要消耗这个性能,哎,需要我们这个极时编译器啊,它去进行一个判别,看看它是不是发生了这个叫呃,这个对象的一个逃逸,没有逃逸的才才可以实现,诶我们刚才的一些优化。
02:15
对吧,哎,就是我们说的这个问题啊,就本身这个逃逸是否发生逃逸呢?诶也是一个需要耗时的过程,那最糟糕的情况呢,就是我们经过逃逸分析之后呢,发现没有一个对象呢,呃,不发生逃逸的。啊,没有一个对象不发生逃逸,那就都逃逸,那这时候我们这个判断的过程呢,就白白浪费了啊,这是一个比较极端的一个情况。但是的话呢,这项技术呢,也是我们重点要关注的。也是我们重点要关注的一个技术,那对于咱们这个讲的这个这个这个逃逸分析来讲呢,咱们淘宝的那个诶jc IH啊,其实呢,它是已经被成熟的应用起来了,就是我们将这个堆空间这个对象,哎,它并不是占上分配了,而是把它放在我们这个本地内存当中,这些呢,就根本不考虑这个垃圾的一个回收,那我只需要呢加这个硬件是不是就可以了,那硬件的话呢,一般我们说这个这个成本都没有那么高了,是吧,随着这个呃摩尔定律的出现啊,这个成本呢是越来越低的,那我们这块通过加这个呃内存的方式,然后我们把这个呢垃圾回收不要呢,在这个呃GCH这个当中呢去体现啊,这个呢其实性能也很好啊,这个呢是相对来说已经被应用起来了啊,比较成熟行,嗯,那大家呢,也会发现说,诶既然说我们现在呢,没有使用。
03:27
那你看这里边提到了啊,说Oracle这个的这个虚拟机啊,嗯,就目前来看,真呢,也是我查阅了相关的一些资料啊,说呢并没有在这个house当中去应用,咱们所谓的这个叫战胜分配,那大家可能会想,那刚才我们演示这个过程,明明呢是不是看到了这个效果呀,那那这个效果怎么去理解呀,那其实这个效果呢,主要原因还是基于咱们这个叫标量替换。哎,这个呢是被应用起来啊,就是我们确实可以呢,实现把我们这个聚合量呢,给大家制解成具体的这个标量,哎,所以呢,提升了我们这个性能啊,这个大家要注意,嗯,行,那么总结一下的话呢,就是我们到底还认不认为这个对象啊,这个堆空间是我们对象分配的唯一的一个空间上呀,哎空间呢,这个答案呢,我们再给它扭回去啊,还是认为是的。
04:12
啊,因为现在呢,我们还是呢,诶,在这个对空间当中来分配的这个对象,这是其一,其次的话呢,就是在我们JDK诶七八当中呢,针对于方法区呢,有一些变化,这个变化呢,主要涉及到我们这个字符串常量池,包括这个静态变量啊,它们这两个结构呢,就不会再放在我们的这个所谓的永久带或者是圆空间了啊,而是呢,放在我们这个堆空间上啊,对于我们说这个常量池中的这个自车常量来讲,而静态变量来讲啊,也都是在对空间中进行分配了,哎,反而呢,更进一步印证了说对象呢,还确实是分配在对上的。啊,那这呢,整体上来看呢,就是一个否定之否定的一个观点是吧,首先呢,大家啊,先否定我们说这个对象呢,是要分配在对上的。啊,那最后呢,我们又推翻了自己的结论,说呢,还是存储在这个对上是吧,诶这个大家呢,去体会一下啊行,那这第十个点结束以后呢,整个呢,咱们关于这个呃,堆空间呢,介绍呢,咱们也就算告一段落啊这呢是一个本章的介绍,哎本章的一个小结,大家最后呢,需要关注的就是我们这个堆空间分成这个年轻带呢和老年贷啊主要呢,我们是在这个年龄贷的一个区域呢去呃这个首先分配这个对象空间。
05:23
啊,这个主要的对象的一个诞生,成长,消亡,主要都是在这个年轻代啊。嗯,这呢,我们提到一个就是朝生夕四是吧,然后老年代呢,是放置这个生命周期比较长的这个对象啊,通常是从这个S外区呢过来的啊,达到那个阈值的,或者说你这个对象过大的啊,这时候呢,我们都会考虑分别在这个对空间,呃,这个老年代上是吧?哎,那又提到了一个叫TLB这样一个概念啊,回忆一下什么意思啊,然后呢,这个JC的话呢,我们说就较频繁的收集这个年轻带啊,较少的收集这个老年带,哎年轻带这块呢,我们称为叫mirror j c,或者叫young j c,老年带这呢叫做major j c,当然呢,哎我们也谈到了,说现在呢,这个经常呢,大家把这两个概念呢,是不是就混淆在一起了,哎,就把这个four g c呢,就等同于这个major j c了。
06:08
那实际上这个for呢,它是要回收我们整个这个堆空间,包括呢,咱们所谓的这个方法区,哎,这呢才叫forc啊,Major j呢,更主要的我们指的是这个老年代啊,但是现在呢,基本上把他俩就混到一起了。哎,这个大家呢,也去理解一下,咱们也说过这个问题,好,那整个呢,关于这个堆内容的一个讲解呢,咱们就告一段落。
我来说两句