00:00
诶,那下边呢,咱们看一看这个方法区的一个演进过程啊,主要呢,我们这里边讲的方法区呢,是针对的houseport虚拟机啊,我们说那个官方规范呢,是一方面,那具体落地呢,还得看具体的这个版本的虚拟机,对吧,就跟说呢,咱们国家规定的这个普通话说呢,这是咱们国家算是一个官方的这个语言。叫这个普通话是吧,这个普通话呢,其实做了一些规范,但是呢,咱们会发现呢,是不是各个地方还有不同版本这个普通话呀,有东北版本的普通话,这个这个河南版本的,这个河北版本的,这个山东版本的,包括呢,还有这个四川版本的普通话,对吧?这个各个地方的这个普通话呢,还会有一些区别。啊,其实咱们要是大家呢,经常去走动的话呢,其实你基本上也能够分辨出来啊,虽然说说的都是普通话,大家也彼此能听得懂,但是你一听就知道,诶这哥们儿东北的啊,东北的嘎达的啊,这一听的都能听出来啊这呢就是有各个不同的版本的普通话,就好比是呢,我们Java虚拟机规范的是一方面,那具体落地方面呢,还有不同的,这个Java虚拟机,我们更多的关注的还是houseport虚拟机,毫无疑问是因为呢,它是根正苗红是吧,是Oracle这个推荐的官方呢,他自己使用的这个虚拟机,所以这块呢,咱们重点讲的也是houseport虚拟机的一个演进过程啊,涉及到其他虚拟机呢,咱们也会提一下啊好,那么在houseport虚拟拟当中,我们说在JDK7及以前,咱们习惯上啊,把这个方法区称为叫永久带。
01:23
哎,叫permanent space啊,叫永久贷,那JDK8开始呢,使用这个叫Meta space叫源空间呢,去取代了永久贷是从我们这个JDK8开始的,那八到现在呢,用的都是叫做圆空间,以后呢,这个也不会变了,基本上我们能够确定下来啊,也不会变了,除非呢,就是别的虚拟机呢,也跟着变了,我们Java虚拟机,这个housewa虚拟机呢,才会跟着变化。好,这是我们说的这个问题,那也就是说呢,大家可以把这个方法区啊,看成咱们所谓的这个接口,而把这个永久带呢和这个圆空间啊,就看成是咱们这个接口的不同的实现,那以前的话呢,我们是永久店,永久店呢落地实现,现在呢改成了叫圆空间,在这个Oracle呢,扎尔新这个官方规范里边啊,有这样的一句话,我这呢就不带这看了啊,直接把它截出来,说呢,在这个JDK8当中,诶这个类的原数据或者叫原信息,哎,现在呢,被保存在了本地的空间当中啊,本地的对空间实际上就是本地内存当中,那这个空间呢,我们起个名字叫Meta space。
02:23
那这里边我们看到的信息呢,一个呢是引入了源空间,其次的话呢,这个源空间使用的是我们本地内存,就是非咱们Java虚拟的内存。啊好说本质上来讲啊,下边又提到了说这个方法区啊,跟这个永久贷呢,还不是等价的啊,这个咱们先别看这个GD8,咱们先看之前,诶刚才呢讲到说这个永久带呢,是不是看到是方法区的一个具体的实现是吧?诶它俩呢诶并不等价,这个大家一定要注意。它仅仅呢是对咱们说的叫hot hotw虚拟机来讲的,在这个虚拟机当中,咱可以把它呢认为是一个等价的。啊,那什么意思啊,大家来看这儿,就是咱们这儿呢,是不是说的这个叫规范是吧,我把这个字呢缩小一点,在这个Java虚拟机这个规范当中啊,这个规范呢,不涉及到具体的是哪一个虚拟机了,我们这里边有个结构呢,叫做方法区跟这个堆呀,你看等等这块我们是列的这种叫并列的结构。
03:16
啊,这呢是一个叫方法区,但是这个方法区呢,具体的落地我们打开也看了这里边这个文档了,是不是没有提到任何一个关,关于叫permanent space这样的一个词是吧,也就是说在这里边根本没有提到英语带,那方法区跟英语带首先不等价。啊,因为我们在这个文档里边根本就没有题,那你为什么说咱们一说到这个方法区的时候呢,在JDK8之前总爱说呢,啊,这不就有纽带吗。诶,主要原因还是因为咱们用的叫houseport虚拟机,而这个虚拟机呢,也是咱们默认的一个,呃虚拟机对吧,大家装的这个Oracle官方认证的这个JDK,那这里边啊杠wash,那我们看到了就是house机。没问题是吧,那么包括呢,咱们在面试的时候呢,呃,那面试官呢,凡是问到你关于虚拟机的一些知识点,其实默认的呢,咱们谈的呢,也都是叫housewa虚拟机,默认的都是指的它啊这个要注意一下,那对于咱们Java虚拟规范来讲,它没有这个规规范这个具体的这个实现没有我做统一的要求,那像我们说的这个g rocket和IBM的这个G9呢,它根本就不存在这个永久带的概念,所以说呢,我们这呢,不能叫等价的。
04:23
啊,再给大家举个例子啊,就好比是咱们生活当中,比如说见到这个狗是吧,咱们看到狗的话呢,都通常都说叫狗啊,这个呢,咱可以看成是这个虚拟规范当中啊说啊这个狗有这样的一类动物,那么在这个呃,House虚拟机里边呢,就是或者说我们有一个地区的人非得把这个狗呢叫做旺财。啊,非得比如说咱咱把它叫做旺财啊,比如说呢,广东人啊,广东人还是比较在乎这个做生意的,这个这个财运是吧?行,那比如说咱们现在就在广州,广东这个就把狗呢称为叫旺财,可以呢,理解成旺财呢,是这个狗的一个具体的落地的实现,那对于广东人来讲呢,它就把这俩是不是就等价到一起了,你说到狗就是说旺财,说旺财就是说狗就把他俩就等价了,但是呢,你是不是仅限于你在广州啊,诶或者我们说叫广东地区,那咱呢,现在就好比是都在广东,因为呢,咱用的都是houseport,但是你要不在广东,在别的地方呢,你说旺财是不是根本就不认识,因为大家就不知道这个词什么意思啊,也就是说呢,像这两个虚拟机呢,咱们根本就不认识永久贷,哎,他们呢,只知道方法去。
05:24
哎,这个大家去体会一下行,下边呢说现在来看啊,当年使用永久带呢,并不是一个好的idea啊,并不是一个好的主意,导致呢,Java程序呢,更容易出现这个OM,嗯,什么意思啊,就是呃,咱们用这个永久带的时候呢,它仍然使用的是咱们这个Java虚拟机的内存。那我们呢,通过这样的一个叫max pro size来设置咱们这个方法区,或者叫这个永久带的一个大小,它的一个上限,那如果你要超出这个上限的话呢,它就会报这个OM了,那事实上的话呢,这个上限呢,也不算多大,那还是比较容易就出现了,那在我们这个G或者G9当中呢,这个呢,我们默认情况下呢,它的这个所谓的方法区,它可以达到几个GB是吧?啊那这时候呢,它就更不容易呢出现这个OM。
06:08
啊,那我们用永久带呢,更容易出现啊,这呢是不是一个太好的一个选择啊,行,这呢就罗列出来,咱们说诶方法区在GDK其中呢,叫永久带作为方法区的落地实现啊,八级以后呢,把圆空间作为方法区的一个落地实现,行这个图呢,大家一看应该都很明白啊,这个图呢,需要你记住它。啊,虽然我不在这多说了啊,咱们前面讲堆的时候也讲过,要记住它啊,要能画出来行,接着往下看说呢,到了JDK8的时候啊,终于呢,完全放废弃了这个UN带的这个概念,改用呢叫或者G9一样的在本地内存当中实现源空间啊这样一个概念呢来替代。那相当于呢,在我们这个八以后,咱们呢就走出来了,就好比是这个广东人,这个就不再呢用这个叫旺财呢,去称为这个狗了。啊,不用这个旺财了,而是呢,跟其他省份的一样啊,就叫狗啊,或者就叫这个dog是吧?哎,来称为我们说这个叫方法区啊,类似的这样一个道理,那还有一个原因呢,是因为咱们说这个BA的这个GE是不是也被Oracle公司收购了,对吧?那GE其实可以认为是世界上啊这个运行速度最快的虚机啊,当然这个IBM的J9呢,也号称是这个效率最高的虚拟机是吧,但是呢,它跟这个j rock的比啊,这个G9呢,顶多是在IBM自己家的这个产品上运行的效率是算算是最高啊,但是呢,呃,兼容性呢要差一些,那应该说呢,大家比较公认的是j rocket是世界上运行速度最快的虚拟机,那很显然呢,Oracle呢,就把j rocket和这个houseboard呢,是不是要考虑把它们叫合二为一啊?
07:41
对吧,诶把他里要合在一起,那合在一起的话呢,在这个内存这块呢,就涉及到一个问题,需要做一个统一,那这样呢,我们就把这个houseport本身呢,呃,有这个应用带也不好,那干脆呢,这时候就跟这一致,咱们呢就干掉了这个永久带,然后呢,诶使用这叫maspace,这个matpace呢,它使用的是本地内存。
08:01
啊,本地的物理内存,而不是呢,咱们Java虚拟机的这个内存。啊,在这里写了是吧,这呢也是咱们说原空间和永久带的一个本质区别啊,那么如果呢,你这个原空间使用的是本地内存,那言外之意呢,咱们这个源空间它的一个大小的限制呢,也仅限于本地内存的一个限制啊,本地内存从长我们说都是几个GB,至少咱们这个PC的这个电脑都几个GB的是吧?哎,只要呢,你这个本地内存的这个有空间默认情况下呢,它可以呃,最大的大小就是本地内存的最大值啊,就更不容易呢,出现OM啊是这样的一个情况。啊,那此外呢,我们说这个永久带跟这个源空间,不光是这个名字改了,包括呢,它这个使用的这个内存的位置变了,它呢内部的细节呢,也做了一些调整,比如说呢,像这个字符串常向池啊,关于这个静态变量啊等等也有变化,这个呢,咱们到后边讲这个具体演进的时候呢,咱们再说啊还是这一章当中呢,后边的内容去说啊行,那么根据Java虚拟规范呢,规定说呢,如果方法区无法满足新的内存的一个分配呢,就会出现OM啊很正常,就是即使呢咱们用的是本地内存,可能呢,它的空间也比较大,但是呢,如果呢,超出了本地内存的这个上限,照样呢也会报oom啊,只不过呢,此时呢,咱们oom后边呢,还要加上一个叫。
09:17
哎,这个,诶在哪呢。在后边呢,是不是要加上一个词叫做Meta space是吧,以前呢是叫permanent space,哎,就是这个异常的信息呢,后边这个著名的信息啊,也会有一些区别,行,那么这儿呢,大家从整体上宏观上呢,能够理解为什么我们有这样的一个演进。
我来说两句